面试题答案
一键面试在Node.js中自定义HTTP中间件接收并处理客户端请求以及返回响应,主要涉及http
模块。以下是详细过程:
主要涉及模块
http
模块:Node.js内置模块,用于创建HTTP服务器。
主要方法
http.createServer()
:创建一个HTTP服务器实例。该方法接受一个回调函数,此回调函数会在每次收到客户端请求时被调用。request
对象方法:request.on('data', callback)
:用于监听请求数据的到来,callback
函数接收数据块作为参数。request.on('end', callback)
:当请求数据接收完毕时触发,可在此时开始处理完整的数据。
response
对象方法:response.writeHead(statusCode, [headers])
:设置响应头,statusCode
是HTTP状态码,headers
是包含响应头字段的对象。response.write(data, [encoding])
:向客户端发送响应数据,data
是要发送的数据,encoding
是数据编码(默认为'utf8'
)。response.end([data], [encoding])
:结束响应,可选择发送最后的数据。
数据流转过程
- 服务器创建:
const http = require('http'); const server = http.createServer((request, response) => { // 在此处处理请求和响应 }); const port = 3000; server.listen(port, () => { console.log(`Server running on port ${port}`); });
- 接收请求:
- 当客户端发起请求,
http.createServer
回调函数中的request
对象就代表该请求。 - 可以通过
request.on('data', callback)
事件监听器逐块接收请求数据,在callback
中对数据进行临时存储或初步处理。例如:
let body = ''; request.on('data', (chunk) => { body += chunk.toString(); });
- 当数据接收完毕,
request.on('end', callback)
事件触发,此时可以处理完整的请求数据。例如解析JSON格式的请求体:
request.on('end', () => { try { const data = JSON.parse(body); // 处理解析后的数据 } catch (error) { // 处理解析错误 } });
- 当客户端发起请求,
- 处理请求:
- 根据请求的URL、方法、请求体数据等,进行相应的业务逻辑处理。例如,检查请求方法是否为
POST
,根据不同的请求路径执行不同的操作等。
- 根据请求的URL、方法、请求体数据等,进行相应的业务逻辑处理。例如,检查请求方法是否为
- 返回响应:
- 首先通过
response.writeHead
设置响应头,如设置状态码为200
表示成功,设置Content-Type
为application/json
表示返回JSON数据:
response.writeHead(200, { 'Content-Type': 'application/json' });
- 然后通过
response.write
发送部分响应数据,如果响应数据较少,可以直接使用response.end
发送完整数据。例如:
const responseData = { message: 'Hello, client!' }; response.end(JSON.stringify(responseData));
- 首先通过
这样就完成了在Node.js中自定义HTTP中间件接收、处理请求并返回响应的过程。