目录
fs文件系统模块
fs.readFile()方法
fs.writeFile()方法
readFile与writeFile的使用
fs模块路径动态拼接问题
path路径模块
path.join()方法
path.basename()
path.extname()
path.parse()
http模块
req请求对象
res响应对象
解决中文乱码问题
响应不同内容
fs文件系统模块
fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
fs.readFile()方法
用来读取指定文件中的内容。其语法格式如下:
fs.readFile(path[,options],callback)
参数1:必选参数,字符串,表示文件路径。
参数2:可选参数,表示以什么编码格式来读取文件。
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
// 导入fs模块,来操作文件
const fs = require('fs')
// 调用 fs.readFile() 方法来读取文件
fs.readFile('./1.txt','utf-8',function(err,dataStr){
// 读取失败执行err,打印的结果为报错的结果
console.log(err);
console.log('----------');
// 读取成功执行dataStr,dataStr就是读取的内容,失败的结果为null
console.log(dataStr);
})
当然我们也可以写一个if语句判断文件是否读取成功,如下:
const fs = require('fs')
fs.readFile('./11.txt','utf-8',function(err,dataStr){
// 如果err为true说明文件读取失败,只有err为null的时候读取文件才会成功
if(err){
console.log('读取文件失败:'+err.message);
}else{
console.log('读取文件成功:'+dataStr);
}
})
fs.writeFile()方法
用来向指定的文件中覆盖写入内容。其语法格式如下:
fs.writeFile(file,data[,options],callback)
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
参数2:必选参数,表示要写入的内容。
参数3:可选参数,表示以什么格式写入文件内容,默认值是utf-8
参数4:必选参数,文件写入完成后的回调函数
const fs = require('fs')
fs.writeFile('./1.txt','hello Node.js','utf-8',function(err){
// 如果文件写入成功,则 err 的值等于 null
// 如果文件写入失败,则 err 的值等于一个错误对象
console.log(err);
})
当然我们也可以写一个if语句判断文件是否写入成功,如下:
const fs = require('fs')
fs.writeFile('./1.txt','hello Node.js','utf-8',function(err){
if(err){
console.log('文件写入失败:'+err.message);
}else{
console.log('文件写入成功!');
}
})
readFile与writeFile的使用
const fs = require('fs')
// 文件读取
fs.readFile('./1.txt','utf-8',function(err,dataStr){
if(err){
console.log('读取文件失败:'+err.message);
}else{
// 将文件以换行回车的形式拼接为一个数组
const Str = dataStr.split('\r\n')
const newStr = []
Str.forEach((item)=>{
// 将原数组中每一项的=替换成:在拼接到新数组中
newStr.push(item.replace('=',':'))
})
// 将新数组中的每一项以回车换行的形式进行合并,得到一个新数组
const updateStr = newStr.join('\r\n')
// 调用 fs.writeFile() 方法,把处理的文件再写入进入
fs.writeFile('./1.txt',updateStr,'utf-8',function(err){
if(err){
console.log('写入文件失败:'+err.message);
}else{
console.log('写入文件成功!!');
}
})
}
})
fs模块路径动态拼接问题
在使用fs模块时,如果提供的操作路径是以 ./ 或 ../ 开头的相对路径时,很容易出现路径动态拼接错误的问题。原因是在代码运行时,会以执行node命令时所处的目录,动态拼接出被操作文件的完整目录。解决方案是在使用fs模块操作文件时,直接提供完整路径,不要提供 ./ 或 ../ 开头的相对路径,从而避免路径动态拼接的问题。如下:
const fs = require('fs')
// 不要使用 ./ 或 ../ 开头的相对路径
fs.readFile('./1.txt','utf-8',function(err,dataStr){
if(err) console.log('读取文件失败:'+err.message);
console.log('读取文件成功:'+'\n'+dataStr);
})
// __dirname 表示当前文件所处的目录
fs.readFile(__dirname+'/1.txt','utf-8',function(err,dataStr){
if(err) console.log('读取文件失败:'+err.message);
console.log('读取文件成功:'+'\n'+dataStr);
})
path路径模块
path路径模块的方法有很多,博主只是举例最常见的模块,如果有想更深一步了解的朋友可以翻阅Node.js 对path路径模块讲解的官方文档:path路径模块官方文档
path模块是Node.js官方提供的,用来处理路径的模块,它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
path.join()方法
用来将多个路径片段拼接成一个完整的路径字符串。示例代码如下:
const path = require('path')
const fs = require('fs')
// 注意:../ 会抵消前面的路径
const pathStr = path.join('/a','/b/c','../','/d','e')
console.log(pathStr); // \a\b\d\e
// 使用fs模块进行读取文件时,使用path模块拼接路径
fs.readFile(path.join(__dirname,'/1.txt'),'utf-8',function(err,dataStr){
if(err) console.log('文件读取失败:'+err.message);
console.log('文件读取成功:'+dataStr);
})
path.basename()
用来从路径字符串中,将文件名解析出来,获取到文件的名称部分,示例代码如下:
const path = require('path')
const fpath = '/a/b/c/index.html'
var fullName = path.basename(fpath)
console.log(fullName); // index.html
// 第二个参数会将 .html 后缀名进行移除
var nameWithoutExt = path.basename(fpath,'.html')
console.log(nameWithoutExt);
path.extname()
用来获取路径中的扩展名部分,示例代码如下:
const path = require('path')
const fpath = '/a/b/c/index.html'
var fext = path.extname(fpath)
console.log(fext); // .html
path.parse()
用来获取当前文件的所有内容(包括所在盘符、所在路径、文件名后缀)
http模块
http模块是Node.js官方提供的,用来创建web服务器的模块。通过 http 模块提供的 http.createServer()方法,就能方便的把一台普通的电脑,变成一台Web服务器,从而对外提供Web服务资源。
客户端:在网络节点中,负责消费资源的电脑。
服务器:负责对外提供网络资源的电脑。与客户端的区别是服务器上装载了web服务器软件,例如:IIS、Apache等。
在Node.js中,,我们不需要使用IIS或Apache等这些第三方的web服务器软件。因为我们可以基于Node.js提供的http模块,通过几行简单的代码手写一个服务器软件,从而对外提供web服务。
// 1、导入 http 模块
const http = require('http')
// 2、创建 web 服务器实例
const server = http.createServer()
// 3、为web服务器绑定 request 事件,监听客户端请求
server.on('request',function(req,res){
console.log('Someone visit our web server');
})
// 4、启动服务器
server.listen(8080,function(){
console.log('server running at http://127.0.0.1:8080');
})
req请求对象
只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数。如果想在事件处理函数中访问与客户端相关的数据或属性,可以通过以下方式:
const http = require('http')
const server = http.createServer()
// req是请求对象,它包含了与客户端相关的数据和属性
server.on('request',(req,res)=>{
// req.url是客户端请求的url地址
const url = req.url
// req.methods是客户端请求的 methods 类型
const method = req.method
const str = `Your request url is ${url},and request method is ${method}`
console.log(str);
})
// 4、启动服务器
server.listen(8080,function(){
console.log('server running at http://127.0.0.1:8080');
})
res响应对象
在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据或属性,可以用如下方式:
const http = require('http')
const server = http.createServer()
// req是请求对象,它包含了与客户端相关的数据和属性
server.on('request',(req,res)=>{
// req.url是客户端请求的url地址
const url = req.url
// req.methods是客户端请求的 methods 类型
const method = req.method
const str = `Your request url is ${url},and request method is ${method}`
console.log(str);
// 调用 res.end() 方法,向客户端响应一些内容
res.end(str)
})
// 4、启动服务器
server.listen(8080,function(){
console.log('server running at http://127.0.0.1:8080');
})
解决中文乱码问题
当调用 res.end()方法,向客户端发送中文内容时,会出现乱码问题,此时需要手动设置内容的编码格式,如下:
const http = require('http')
const server = http.createServer()
server.on('request',(req,res)=>{
// 定义一个中文字符串,包含中文内容
const str = `您请求的 URL 地址是 ${req.url},请求的 method 类型是 ${req.method}`
// 调用 res.setHeader() 方法,设置 Content-Type 响应头,解决中文乱码问题
res.setHeader('Content-Type','text/html; charset=utf-8')
// res.end() 将内容响应给服务器
res.end(str)
})
server.listen('8080',()=>{
console.log('server running at http://127.0.0.1:8080');
})
响应不同内容
我们要实现根据访问的url路径来向页面去响应不同的内容。
const http = require('http')
const server = http.createServer()
server.on('request',(req,res)=>{
// 获取请求的url地址
const url = req.url
// 设置默认响应内容为 404 Not found
let content = '<h1>404 Not found</h1>'
// 判断用户访问的界面来返回不同的结果
if(url==='/' || url==='/index.html'){
content = '<h1>首页</h1>'
}else if(url === '/about.html'){
content = '<h1>关于页面</h1>'
}
// 设置中文编码
res.setHeader('content-Type','text/html; charset=utf-8')
// 使用res.end()方法把内容响应到客户端
res.end(content)
})
server.listen('8080',()=>{
console.log('server running at http://127.0.0.1:8080');
})
还是重复一点,如果想更深一步的去了解,还是推荐看Node.js的官方文档,里面的所有内容都涵盖了,可以结合相关博主文章去一一印证:官方文档