一、先搞懂: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=男