Node.js 入门搞定核心内置模块(fs/path/http/querystring)

一、先搞懂:Node.js 到底是啥?

Node.js 是基于 Chrome V8 引擎的JavaScript 运行时环境------ 简单说:让 JS 能脱离浏览器,在服务器 / 本地电脑上跑!
核心特点

  • 单线程 + 非阻塞 I/O(处理高并发超高效)
  • 内置了一堆 "工具模块"(今天学的 fs/path 这些)
  • 用 npm 能装几百万个第三方包(比如 Express 框架)

二、核心模块 1:fs 模块(文件操作 "万能钥匙")

fs是 File System 的缩写,负责读写本地文件 / 文件夹,是 Node.js 操作磁盘的核心工具。

1. 先导入

javascript 复制代码
const fs = require('fs'); // Node自带,不用npm装!

2. 常用操作:读 / 写文件

(1)异步读文件(推荐!不卡代码)

javascript 复制代码
// 读当前目录下的data.txt,指定编码为utf-8
fs.readFile('./data.txt', 'utf-8', (err, data) => {
  if (err) { // 出错时err有值,成功则err是null
    console.log('读取失败:', err);
    return;
  }
  console.log('文件内容:', data); // 直接拿到字符串
});

(2)异步写文件

javascript 复制代码
// 把"Hello Node.js"写入data.txt
fs.writeFile('./data.txt', 'Hello Node.js', (err) => {
  if (err) throw err;
  console.log('写入成功!');
});

(3)追加内容(比如写日志)

javascript 复制代码
// 往文件末尾加一行内容(加\n换行)
fs.appendFile('./data.txt', '\n我是追加的内容', (err) => {
  if (err) throw err;
  console.log('追加成功!');
});

三、核心模块 2:path 模块

不同系统的路径分隔符不一样(Windows 用\,Mac/Linux 用/),path模块帮你统一处理路径,避免写死路径出 bug。

1.先导入

javascript 复制代码
const path = require('path');

2. 最常用方法:拼接路径

javascript 复制代码
// 拼接"当前目录" + "data" + "province.json"
const filePath = path.join(__dirname, 'data', 'province.json');
console.log(filePath); 
// Windows输出:D:\项目\data\province.json
// Mac输出:/Users/项目/data/province.json

3. 其他实用方法

javascript 复制代码
// 解析路径:拿到文件名、后缀、目录
const pathInfo = path.parse(filePath);
console.log(pathInfo); 
// 输出:{ root: 'D:\\', dir: 'D:\\项目\\data', base: 'province.json', ext: '.json', name: 'province' }

// 获取文件后缀
console.log(path.extname(filePath)); // 输出:.json

四、核心模块 3:http 模块

http模块能让你不依赖 Nginx/Apache,直接用 Node 写 Web 服务器,是做接口 / 后端的基础!

1.写个最简单的 Web 服务

javascript 复制代码
const http = require('http');

// 创建服务器实例
const server = http.createServer((req, res) => {
    // req:请求对象(存了前端传的参数、路径等)
    // res:响应对象(给前端返回数据)

    // 设置响应头(告诉浏览器返回的是JSON,编码UTF-8)
    res.setHeader('Content-Type', 'application/json;charset=utf-8');

    // 返回数据并结束响应
    res.end('你好,亲爱的世界')
});

// 监听3000端口
server.listen(3000, () => {
    console.log('服务器启动:http://localhost:3000');
});

注意:一定要使用响应头,或者中文会出现乱码的情况,不同的响应头有不一样的含义。

javascript 复制代码
// application/json : 这次响应的是JSON字符串,一般是写接口用的
// text/html;charset=utf-8 : 这次响应的是HTML字符串,编码为utf-8
// text/plain 普通文本

启动后打开浏览器访问http://localhost:3000,就能看到返回的 JSON!

结果如图所示:

2. 进阶:根据请求路径返回不同数据(路由)

比如做个 "省份列表接口":

javascript 复制代码
/**
 * 目标:基于Web服务,开发-省份列表数据接口
 * 步骤:
 * 1.创建Web服务
 * 2.使用req.url获取请求的资源路径,读取json文件数据返回
 * 3.其他请求的路径,暂时返回不存在的提示
 * 4.运行Web服务,用浏览器请求地址查看效果
 */

// 1.创建Web服务
const http = require('http')
const fs = require('fs')
const path = require('path')
const server = http.createServer()

server.on('request', (req, res) => {
    // 2.使用req.url获取请求的资源路径,读取json文件数据返回
    // console.log('有人来请求了:', req.url)
    // 如果请求 /api/province 就响应 ok
    if (req.url === '/api/province') {
        fs.readFile(path.join(__dirname, 'data/province.json'), (err, data) => {
            if (err) return console.log(err)
                // 不要忘了设置响应头
            res.setHeader('Content-Type', 'application/json')
            // 响应读到的json数据
            res.end(data.toString())
        })
    }else {
        // 其他情况响应找不到该资源
        res.setHeader('Content-Type', 'text/html;charset=utf-8')
        res.end('找不到该资源')
    }
})

server.listen(3000, () => {
    console.log('Web 服务器已启动')
})

data/province.json中放入的是各个省的数据

json 复制代码
[
  "北京市",
  "天津市",
  "河北省",
  "山西省",
  "内蒙古自治区",
  "辽宁省",
  "吉林省",
  "黑龙江省",
  "上海市",
  "江苏省",
  "浙江省",
  "安徽省",
  "福建省",
  "江西省",
  "山东省",
  "河南省",
  "湖北省",
  "湖南省",
  "广东省",
  "广西壮族自治区",
  "海南省",
  "重庆市",
  "四川省",
  "贵州省",
  "云南省",
  "西藏自治区",
  "陕西省",
  "甘肃省",
  "青海省",
  "宁夏回族自治区",
  "新疆维吾尔自治区",
  "香港特别行政区",
  "澳门特别行政区",
  "台湾省"
]

结果演示

注意:此时的端口号不再是http://localhost:3000/,而是http://localhost:3000/api/province

五、核心模块 4:querystring 模块

前端传参时,URL 里的?name=张三&age=18这种格式,用querystring能快速转成 JS 对象。

1. 解析 URL 参数

javascript 复制代码
const querystring = require('querystring');

// 假设前端传的参数是"name=张三&age=18"
const paramsStr = 'name=张三&age=18';
const params = querystring.parse(paramsStr);
console.log(params); // 输出:{ name: '张三', age: '18' }

2. 反向:把对象转成 URL 参数

javascript 复制代码
const obj = { name: '李四', gender: '男' };
const paramsStr = querystring.stringify(obj);
console.log(paramsStr); // 输出:name=李四&gender=男
相关推荐
q***01771 小时前
从零开始在Windows系统上搭建一个node.js后端服务项目
windows·node.js
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [block]fops
linux·笔记·学习
C语言不精1 小时前
一种在 ESP32-S3 上取巧的清晰度检测方案
c语言·stm32·嵌入式硬件·学习
w***4241 小时前
报错The default superclass, “jakarta.servlet.http.HttpServlet“(已经配置好tomcat)
http·servlet·tomcat
ByteCraze1 小时前
如何处理大模型幻觉问题?
前端·人工智能·深度学习·机器学习·node.js
丝斯20111 小时前
AI学习笔记整理(23)—— AI核心技术(深度学习7)
人工智能·笔记·学习
烤麻辣烫1 小时前
黑马程序员苍穹外卖(新手)DAY10
java·开发语言·学习·spring·intellij-idea
q***73551 小时前
Node.JS 版本管理工具 Fnm 安装及配置(Windows)
windows·node.js
●VON1 小时前
Flutter vs React Native vs 原生开发:有何不同?
学习·flutter·react native·react.js·openharmony