MST

星途 面试题库

面试题:Node.js 自定义HTTP中间件中如何处理请求和响应

请描述在Node.js中自定义一个HTTP中间件,如何接收并处理客户端的请求,以及如何向客户端返回响应。需要说明主要涉及的模块、方法以及数据流转过程。
19.1万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

在Node.js中自定义HTTP中间件接收并处理客户端请求以及返回响应,主要涉及http模块。以下是详细过程:

主要涉及模块

  • http模块:Node.js内置模块,用于创建HTTP服务器。

主要方法

  1. http.createServer():创建一个HTTP服务器实例。该方法接受一个回调函数,此回调函数会在每次收到客户端请求时被调用。
  2. request对象方法
    • request.on('data', callback):用于监听请求数据的到来,callback函数接收数据块作为参数。
    • request.on('end', callback):当请求数据接收完毕时触发,可在此时开始处理完整的数据。
  3. response对象方法
    • response.writeHead(statusCode, [headers]):设置响应头,statusCode是HTTP状态码,headers是包含响应头字段的对象。
    • response.write(data, [encoding]):向客户端发送响应数据,data是要发送的数据,encoding是数据编码(默认为'utf8')。
    • response.end([data], [encoding]):结束响应,可选择发送最后的数据。

数据流转过程

  1. 服务器创建
    const http = require('http');
    
    const server = http.createServer((request, response) => {
        // 在此处处理请求和响应
    });
    
    const port = 3000;
    server.listen(port, () => {
        console.log(`Server running on port ${port}`);
    });
    
  2. 接收请求
    • 当客户端发起请求,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) {
            // 处理解析错误
        }
    });
    
  3. 处理请求
    • 根据请求的URL、方法、请求体数据等,进行相应的业务逻辑处理。例如,检查请求方法是否为POST,根据不同的请求路径执行不同的操作等。
  4. 返回响应
    • 首先通过response.writeHead设置响应头,如设置状态码为200表示成功,设置Content-Typeapplication/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中间件接收、处理请求并返回响应的过程。