Node.js 提供了许多内置模块,可以帮助开发人员更快地开发应用程序。
主要使用模块为fs
,http
, path
,crypto
,events
,stream
http
模块提供了创建 HTTP 服务器和客户端的功能。path
模块提供了处理文件和目录路径的功能。fs
模块提供了文件系统相关的功能,如读写文件。os
模块提供了操作系统相关的功能。crypto
模块提供了加密相关的功能。events
模块提供了事件驱动编程相关的功能。stream
模块提供了流相关的功能。
本文针对 path 以及 http 模块进行基础知识总结,其他模块会放在node.js基础知识大框图下,定时更新。
一、path模块
path模块提供了操作路径的功能,我们将介绍如下几个较为常用的几个API:
API | 说明 |
---|---|
path.resolve | 拼接规范的绝对路径 (常用) |
path.sep | 获取操作系统的路径分隔符 |
path.parse | 解析路径并返回对象 |
path.basename | 获取路径的基础名称 |
path.dirname | 获取路径的目录名 |
path.extname | 获得路径的扩展名 |
//代码实例
const path = require('path');
//获取路径分隔符
console.log(path.sep);
//拼接绝对路径(常用)
console.log(path.resolve(__dirname, 'test'));
//解析路径
let pathname = 'D:/program file/nodejs/node.exe';
console.log(path.parse(pathname));
//获取路径基础名称
console.log(path.basename(pathname))
//获取路径的目录名
console.log(path.dirname(pathname));
//获取路径的扩展名
console.log(path.extname(pathname)
二、http模块
首先介绍计算机网络http的基础知识,挑着重点说~
HTTP协议;超文本传输协议,是一种基于TCP/IP的应用层通信协议,协议中主要规定了两个方面的内容
客户端:用来向服务器发送数据,可以被称之为请求报文。
服务端:向客户端返回数据,可以被称之为响应报文。
ps:报文可以简单理解为就是一堆字符串~~
a)请求报文
HTTP 请求报文由请求行(request line)、请求头部(header)、空行和请求数据 4 个部分组成。下面是一个简单的例子:
GET /path/to/file.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
上面的例子中,第一行是请求行,包括请求方法(GET)、URL(/path/to/file.html)和 HTTP 协议版本(HTTP/1.1)。接下来是请求头部,包括 Host、User-Agent、Accept、Accept-Language、Accept-Encoding 和 Connection 等字段。最后是一个空行,表示请求头部结束。
b)响应报文 HTTP 响应报文和请求报文的结构差不多,也是由四个部分组成:状态行、响应头部、空行和响应数据。下面是一个简单的例子:
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 28 Oct 2019 09:21:28 GMT
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Pragma: no-cache
{
"data": "Hello World!"
}
上面的例子中,第一行是状态行,包括 HTTP 协议版本(HTTP/1.1)、状态码(200)和状态描述(OK)。接下来是响应头部,包括 Server、Date、Content-Type、Transfer-Encoding、Connection、Expires、Cache-Control、X-XSS-Protection、X-Content-Type-Options 和 Pragma 等字段。最后是一个空行,表示响应头部结束,接下来是响应数据hello world。
言归正传,回到node中的http模块,在node.js中,模块提供了创建 HTTP 服务器和客户端的能力。您可以使用 require('http')
来引入该模块。
//1. 导入 http 模块
const http = require('http');
//2. 创建服务对象 create 创建 server 服务
// request 意为请求. 是对请求报文的封装对象, 通过 request 对象可以获得请求报文的数据
// response 意为响应. 是对响应报文的封装对象, 通过 response 对象可以设置响应报文
const server = http.createServer((request, response) => {
response.end('Hello HTTP server');
});
//3. 监听端口, 启动服务
server.listen(9000, () => {
console.log('服务已经启动, 端口 9000 监听中...');
});
http.createServer 里的回调函数的执行时机: 当接收到 HTTP 请求的时候,就会执行
在使用 http
模块时,需要注意以下几点:
- 在回调函数中,必须使用
res.end()
方法结束响应,否则客户端将一直处于等待状态。 - 在设置响应头时,需要注意字段名称的大小写。根据 HTTP 协议规定,字段名称不区分大小写,但建议按照惯例使用首字母大写的形式。
- 在设置响应内容时,可以使用
res.write()
方法多次写入响应内容,最后再使用res.end()
方法结束响应。
在node.js作为后端的开发过程中,通常配合express中间件完成,Express 建立在 Node.js 的 http
模块之上,它提供了更高层次的抽象,使得开发人员可以更方便地处理 HTTP 请求和响应。因此,您可以认为 Express 具有 http
模块的同等功能,并且提供了更多的便利。
例如,在使用 http
模块创建 HTTP 服务器时,您需要手动解析请求 URL、处理路由、设置响应头和响应内容等。而在使用 Express 时,这些操作都可以通过简单的 API 完成,大大提高了开发效率。
总之,Express 是一个非常强大的 Web 开发框架,它在 http
模块的基础上提供了更多的功能和便利。
还望各位前辈不吝赐教~,努力进步中!