-
fs文件系统模块
fs模块是Nodejs官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
列如:
- fs.readFile()方法,用来读取指定文件中的内容
- fs.writeFile(方法,用来向指定的文件中写入内容,
注:可以创建文件,但针对不存在的路径,就无法无法创建文件,新内容会覆盖旧内容
如果要在JavaScript代码中,使用fs模块来操作文件,则需要使用如下的方式先导入它:
const fs = require('fs');
1.1读写指定文件中的内容
-
fs.readFile():使用fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:
fs.readFile(path,[option],callback);
参数解读:
参数1∶必选参数,字符串,表示文件的路径。
参数2:可选参数,表示以什么编码格式来读取文件。
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。//1. 导入fs模块,来操作文件 const fs = require('fs'); // 2.调用fs.readFile()方法读取文件 // 参数1: 读取文件的存放路径 // 参数2:读取文件的时候采用的编码格式 // 参数3:回调函数,拿到读取失败和成功的结果 err dataStr fs.readFile('./file/text1.txt','utf-8',function(err,dataStr){ // 2.1打印失败的结果: // 如果读取成功:则err=null,dataStr的值为文件中的内容 // 如果读取失败,否则err=错误对象,dataStr的值为undefine // console.log(err); // console.log('---------'); // 2.2打印成功的结果 // console.log(dataStr); // 3.判断读取是否成功,对象转成布尔型是true if(err){ return console.log("读取失败",err.message); }else{ console.log("读取文件成功",dataStr) } })
-
fs.writeFile()方法,可以向指定未见中写入内容,语法格式如下:
fs.writeFile(file,data[,option],callback)
参数解读:
参数1∶必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。[注:
写入的路径有这个盘没有文件则会自动创建文件再写入,如果无这个盘,则会写入失败!eg:‘G:/file/2.txt’,电脑无G 盘写入失败]参数2:必选参数,表示要写入的内容。[
注:
这里是覆盖文件中的内容]参数3:可选参数,表示以什么格式写入文件内容,默认值是utf-8。
参数4:必选参数,文件写入完成后的回调函数。
// 引入fs模块 const fs = require('fs'); // fs.writeFile(file,data[,option],callback) var string ="这是我写入的内容:fs.writeFile(file,data[,option],callback)"; // 参数1.表示要写入文件的路径 // 参数2.表示要写入的内容 // 参数3.写入格式,默认utf-8 // 参数4.回调函数 fs.writeFile('./file/2.txt',string,'utf-8',function(err){ // 1.如果文件写入成功,err=null // console.log(err); //2.如果写入失败,err=错误对象 if(err){ return console.log("文件写入失败",err.message) } console.log("写入成功!"); })
1.2.fs模块-路径动态拼接问题
在使用fs模块操作文件时,如果提供的操作路径是以./或…/开头的相对路径时,很容易出现路径动态拼接错误的问题
原因
:代码在运行的时候,执行node命令时所处的目录加上被执行文件所在当前目录下的路径,两者动态拼接出被操作文件的完整路径出现路径拼接错误的问题,是因为提供了./或…/相对路径,解决方法:提供完整绝对路径,但缺点:移植性非常差、不利于维护,
那如何克服带来的缺点,而又解决问题:
__dirname(表示当前文件所在的目录)
+文件路径:
const path = require('path');
// fs.readFile(__dirname+'./file/2.txt');
fs.readFile(path.join(__dirname,'./file/2.txt'),'utf8',function(err,dataStr){})
-
path路径模块
path模块是Node.js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
-
path.join()方法:将多个路径片段拼接成一个完成的路径字符串
-
path.basename()方法:用来从路径字符串中,将文件名解析出来
const path = require('path'); // 定义文件的存放路径 const fpath = "/a/b/c/d/index.html"; const filename1 = path.basename(fpath); const filename2 = path.basename(fpath,'.html'); console.log(filename1,filename2);
函数名 参数列表 返回值 备注 作用 path.join([…path]) 可以传多个路径片段[…path] String …/可以抵消前面的路径 ; 注意:
今后凡是设计到路径拼接的操作都要使用path.join()方法进行出路。不要直接使用+好进行字符串的拼接拼接多个路径 path.basename(path[,ext]) path:必选参数,路径字符串;ext:可选参数,表示文件拓展名 String,返回路径中最后一部分,一般是路径中的文件名 获取路径中的文件名 path.extname(path) path:必选参数,表示路径的字符串 String 获取路径中拓展名的部分 -
-
http模块
3.1服务器与客户端
在网络节点中,负责消费资源的电脑,叫做客户端。
负责对外提供网络资源的电脑,叫做服务器。
http模块是Node.js官方提供的、用来创建web服务器的模块。通过http模块提供的http.creatServer()方法,就能把一台普通电脑变成一台web服务器,从而对外提供web资源服务。
服务器和普通电脑的区别:服务器上安装了web服务器软件,例如:IIS、Apache等。通过安装这些服务器软件,就能把一台普通的电脑变成一台web服务器。
在Node,js 中,我们不需要使用lIS、Apache等这些第三方web服务器软件。因为我们可以基于Node,js提供的http模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供web 服务IP地址和域名是一一对应的关系,这份对应关系存放在一种叫做域名服务器(DNS,Domain name server)的电脑中。使用者只需通过好记的域名访问对应的服务器即可,对应的转换工作由域名服务器实现。因此,域名服务器就是提供IР地址和域名之间的转换服务的服冬器
注:在开发测试期间,127.0.0.1对应的域名是localhost,它们都代表我们自己的这台电脑,在使用效果上没有任何区别。
3.2端口号
在一台电脑中,可以运行成百上千个web服务。每个web服务都对应一个唯一的端口号。客户端发送过来的网络请求,通过端口号,可以被准确地交给对应的 web 服务进行处理。
注:
- 每个端口号不能同时被多个web服务占用
- 在实际应用中,URL中的80端口可以被省略
3.3创建基本web服务器
-
导入http模块
-
创建web服务器实例:http.creatserve
-
为服务器实例绑定request事件,监听客户端的请求
-
启动服务器:调用服务器实例的.listen()方法,即可启动当前的web服务器实例
注:ctl+c停止终端的服务器
// 1导入http模块 const http = require('http'); // 2.创建web服务器实例 const server = http.createServer(); // 3.为服务器实例绑定request事件,监听客户端的请求 server.on('request',(req,res)=>{ console.log("有人访问我们的服务器!") })//第一个参数事件名称,第二个参数回调函数 // 4.启动服务器,参数一:端口号,参数二:成功之后的回调函数 server.listen(8080,()=>{ console.log("服务器运行在ip:127.0.0.1:8080") })
3.4request对象
只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数
const http = require('http'); const server = http.createServer(); // req是请求对象,包涵了与客户端相关的属性和数据 // 为服务器实例绑定request事件,监听客户端请求 server.on('request',(req,res)=>{ // req.url是客户端的请求的url地址 // req.method是客户端的请求的method类型 const {url,method} = req; const str = `Your request url is ${url},and request method is ${method}` console.log(str) // 调用res.end()方法,向客户端相应一些内容 res.end(str); }) server.listen(8080,()=>{ console.log("服务器运行在ip:127.0.0.1:8080") })
3.5res
当调用res.end()方法,想客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式
解决中文乱码问题:
// 为了方式中文乱码问题,调用 res.setHeader()方法,设置Content-Type响应头,解决中文乱码问题 res.setHeader('Content-Type','text/html;charset=utf-8')