上篇文章已经可以搭建一个简单的 node 服务器了,那么在实际应用中那面会用到文件读写,特别是在前端没有数据库支持进行接口模拟的情况下,读写文件响应数据便非常有用.
一. Node.js 内置模块 fs 基本使用
1.引入模块
const fs = require('fs');
2. 文件读取操作
fs.readFile('路径', (data, err) => {
// 读取成功 data 读取到的数据 err 没有内容
// 读取失败 data 为 undefined err 有内容
// =====
// 读取内容 默认为二进制, 要正确得到文字可使用 toString() 或者在 在路径后添加编码格式 'utf-8'
});
3. 文件写操作
fs.writeFile('路径', 内容, 回调函数);
注意1:如果没有这个文件,它会帮你创建,如果有这个文件会帮你覆盖
但是如果没有对应的文件夹就
报错
注意2:内容只能是字符串或二进制数组,否则报错
4. 文件读写要考虑的路径问题
在node 中相对路径是相对于当前终端的路径, 搭建的服务资源可能换台服务器请求路径有变,因此文件读写及涉及文件路径等的操作都要使用绝对路径. 使用 node 中内置的 path 模块,拼接绝对路径.
const path = require('path');
__dirname
获取的是当前代码文件所在的绝对路径,不包含文件名
__filename
获取的是当前代码文件所在的绝对路径,包含文件名// 路径拼接
path.join(路径, 文件名)
path.join(__dirname, 'files/text01.txt')
二. 文件读操作
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
app.get('/', (req, res) => {
res.setHeader('Content-Type', 'text/html; charset=utf-8');
const fullPath = path.join(__dirname, 'files', 'text01.txt');
fs.readFile(fullPath, (data, err) => {
if (!err) {
res.send(data);
} else {
res.send(err);
}
});
});
app.listen(2333, () => {
console.log('启动端口 2333');
});
浏览器访问根目录, 即可获取到文件中的内容
三. 文件写操作
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
app.get('/', (req, res) => {
res.setHeader('Content-Type', 'text/html; charset=utf-8');
const fullPath = path.join(__dirname, 'files', 'text01.txt');
// 文件读操作
// fs.readFile(fullPath, (data, err) => {
// if (!err) {
// res.end(data);
// } else {
// res.end(err);
// }
// });
// 文件写操作
const writePath = path.join(__dirname, 'files', 'text02.txt');
fs.writeFile(writePath, '今日晴空万里!', (data, err) => {
if (!err) {
res.send('文件写入成功');
} else {
res.send(err);
}
});
});
app.listen(2333, () => {
console.log('启动端口 2333');
});
重启服务,访问根目录即可查看写入的文件.
以上便可完成使用node 内置模块 完成简单的文件读写,核心方法 fs.readFile fs.writeFile, 另外需要注意文件路径.
脆弱的事物喜欢安宁的环境,而反脆弱的事物则从混乱中成长.