服务端对文件进行读、写是很常用的功能,那么怎么实现读、写?
使用fs模块,fs模块又两个方法readFile()和writeFile(),两个方法就是对文件进行读、写的
1、读取文件使用readFile(fileName,callback)方法,该方法接受两个参数,fileName:需要读取的文件名;callback:读取的回调函数,回调函数有两个参数 分别为err读取错误,和data读取到的内容
在项目根目录新建一个index.txt,并写入一些内容
const http = require("http") const fs = require("fs") var server = http.createServer(function (req,res) { res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'}); // 异步读取 fs.readFile('./index.txt',function (err,data) { if(err){ res.write("文件不存在") }else { res.write(data) } res.end() }) // 同步读取 var data = fs.readFileSync('index.txt'); console.log("同步读取: " + data.toString()); }) server.listen(8080)
启动服务器,浏览器访问,可以看到浏览器输入了文件的内容
如果使用console在命令工具中打印输出的是buffer,这是原始的二进制数据,服务器除了要出来文本,还要处理图片等二进制文件
如果想要看到文字就要使用data.toString()
2、对文件写入内容使用writeFile(fileName,data[,option],callback)方法
fileName:为需要写入的文件;
data:为写入的内容;
callback:写入的回调函数;
如果options是一个字符串,则他指定字符编码
const http = require("http") const fs = require("fs") var server = http.createServer(function (req,res) { res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'}); fs.writeFile('./index.txt','我是通过node.js的文件系统fs.writeFile写入文件的内容','utf8',function (err) { // 异步读取 fs.readFile('./ceshi.txt',function (err,data) { if(err){ res.write("文件不存在") }else { res.write(data) } res.end() }) }) }) server.listen(8080)
打开index.txt文件可以看到内容已经写入了,但是如果index.txt原本就有内容,再写入,那么原来的内容将被新写入的内容替代
更多文件操作可以去官网查看
在项目根目录新建一个www文件夹,在文件新建a.html、b.html
a.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ 300px; height: 300px; margin: 0 auto; background-color: aqua; } p{ text-align: center; color: red; font-size: 30px; } </style> </head> <body> <div> <p>a.html</p> </div> </body> </html>
b.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ 800px; height: 300px; margin: 0 auto; background-color: burlywood; } p{ text-align: center; color: red; font-size: 30px; } </style> </head> <body> <div> <p>这是b.html页面</p> </div> </body> </html>
server.js
const http = require("http") const fs = require("fs") var server = http.createServer(function (req, res) { var fileName = './www' + req.url fs.readFile(fileName, function (err, data) { console.log("bbbbbbb") if (err) { res.write("404") } else { res.write(data) } res.end() }) console.log("aaaaaa") }) server.listen(8080)
启动服务,浏览器访问localhost:8080/a.html 和 localhost:8080/b.html 可以看到确实按照html的样式显示了
注意打印的内容顺序,res.end()的位置