1. 什么是 Node.js
Node.js是一个运行平台,即js的后端运行环境,内置了很多模块可以使用。有了Node.js,java script也可以做后端开发。
2.Node.js中的三大类模块?
内置模块,自定义模块,第三方模块。
1内置模块
内置模块即Node.js 官方提供的模块,包括fs文件系统模块、path路径模块、http模块。
1.1.1 fs文件系统模块
fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:
fs.readFile() 方法,用来读取指定文件中的内容
fs.writeFile() 方法,用来向指定的文件中写入内容
如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:
![](https://i-blog.csdnimg.cn/blog_migrate/1eeebeaf38d027d0b133d453b28820e4.png)
使用 fs.readFile() 方法,可以读取指定文件中的内容,语法格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4c6aa70825f20743db160dcfd39eda0f.png)
参数解读:
参数1:必选参数,字符串,表示文件的路径。
参数2:可选参数,表示以什么编码格式来读取文件。
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
fs.readFile() 的示例代码 以utf8 的编码格式,读取指定文件的内容,并打印 err 和 dataStr 的值:
![](https://i-blog.csdnimg.cn/blog_migrate/abf3386e2f4cc9ed55578fbfabe03ff6.png)
判断文件是否读取成功 可以判断 err 对象是否为 null,从而知晓文件读取的结果:
![](https://i-blog.csdnimg.cn/blog_migrate/36792102d7fe7707749afd53f3295393.png)
使用 fs.writeFile() 方法,可以向指定的文件中写入内容,语法格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/9dc52219582929683188994c9e9ff0a2.png)
参数解读:
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
参数2:必选参数,表示要写入的内容。
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。
参数4:必选参数,文件写入完成后的回调函数。
向指定的文件路径中,写入文件内容:
![](https://i-blog.csdnimg.cn/blog_migrate/10670b4659eb92de701a0df9bdbf4563.png)
判断文件是否写入成功 可以判断 err 对象是否为 null,从而知晓文件写入的结果:
![](https://i-blog.csdnimg.cn/blog_migrate/5af26a22e4a71f4dbb52d6c0d035315a.png)
fs 模块 - 路径动态拼接的问题
在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 ../ 开头的相对路径时,很容易出现路径动态拼接错误的问题。
原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。
解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或 ../ 开头的相对路径,从而防止路径动态拼接的问题。
![](https://i-blog.csdnimg.cn/blog_migrate/8494b439c9813485e1d35065bf93dfe5.png)
1.1.2 path路径模块
path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
例如:
path.join() 方法,用来将多个路径片段拼接成一个完整的路径字符串
path.basename() 方法,用来从路径字符串中,将文件名解析出来
如果要在 JavaScript 代码中,使用 path 模块来处理路径,则需要使用如下的方式先导入它:
![](https://i-blog.csdnimg.cn/blog_migrate/ba9b45f1af50eda14d2fa43879d6a00b.png)
路径拼接 使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/100785381986fca57210bf61e56ce712.png)
参数解读:
...paths <string> 路径片段的序列
返回值: <string>
使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串:
![](https://i-blog.csdnimg.cn/blog_migrate/586816a7ff744df5b7aeb2bfbcfb9b28.png)
使用 path.basename() 方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名,语法格式如下:
![](https://i-blog.csdnimg.cn/blog_migrate/622d3bedbff1bd648866ecff4bce2c8c.png)
参数解读:
path <string> 必选参数,表示一个路径的字符串
ext <string> 可选参数,表示文件扩展名
返回: <string> 表示路径中的最后一部分
使用 path.basename() 方法,可以从一个文件路径中,获取到文件的名称部分:
![](https://i-blog.csdnimg.cn/blog_migrate/9e2486c5dc9e3c987d3bb6fb277caf13.png)
1.1.3 http模块
http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 Web 服务器,从而对外提供 Web 资源服务。
如果要希望使用 http 模块创建 Web 服务器,则需要先导入它:
![](https://i-blog.csdnimg.cn/blog_migrate/878bc0d77487c594d498175d7d7c3dfa.png)
创建 web 服务器的基本步骤
① 导入 http 模块
![](https://i-blog.csdnimg.cn/blog_migrate/9624b53c076e9c83e030a3245976db4a.png)
② 创建 web 服务器实例
![](https://i-blog.csdnimg.cn/blog_migrate/63941864f41560b19f93c2522cc4d28a.png)
③ 为服务器实例绑定 request 事件,监听客户端的请求
![](https://i-blog.csdnimg.cn/blog_migrate/024935a01bf438b2b1ce5c5ac05eef15.png)
④ 启动服务器
![](https://i-blog.csdnimg.cn/blog_migrate/766a921f9c5c749ad5e1b36abf2031bd.png)
只要服务器接收到了客户端的请求,就会调用通过 server.on() 为服务器绑定的 request 事件处理函数。
如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下的方式:
![](https://i-blog.csdnimg.cn/blog_migrate/84439b2b69826d817607102824ea63a7.png)
在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据或属性,可以使用如下的方式:
![](https://i-blog.csdnimg.cn/blog_migrate/d3501bea461a8630a23157914196d2e8.png)
当调用 res.end() 方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式:
![](https://i-blog.csdnimg.cn/blog_migrate/7c9c555dab148464dbbebeaf82c182d4.png)
根据不同的 url 响应不同的 html 内容
① 获取请求的 url 地址
② 设置默认的响应内容为 404 Not found
③ 判断用户请求的是否为 / 或 /index.html 首页
④ 判断用户请求的是否为 /about.html 关于页面
⑤ 设置 Content-Type 响应头,防止中文乱码
⑥ 使用 res.end() 把内容响应给客户端
![](https://i-blog.csdnimg.cn/blog_migrate/bd4bee4d2883b7b38cdad3c580c92583.png)