Nodejs 怎么获得http请求体?不是请求的头

Nodejs 怎么获得http请求体?不是请求的头

我createServer 开了一个监听。 怎样获取client请求时的http主体? 因为那个client不是通过http GET发送内容,而是把内容放在http体里。

3 回复

当然可以。当客户端使用HTTP POST、PUT等方法向服务器发送数据时,这些数据通常被包含在HTTP请求体(body)中。在Node.js中,你可以通过监听data事件来收集请求体中的数据,并通过end事件来判断数据是否已经完全接收完毕。

以下是一个简单的示例,展示如何在Node.js中获取HTTP请求体:

const http = require('http');

// 创建一个HTTP服务器
const server = http.createServer((req, res) => {
    // 设置响应头部信息
    res.writeHead(200, {'Content-Type': 'text/plain'});

    let body = [];
    req.on('data', (chunk) => {
        // 将接收到的数据片段添加到数组中
        body.push(chunk);
    }).on('end', () => {
        // 当所有数据都接收完毕后,将数组中的数据拼接成字符串
        body = Buffer.concat(body).toString();
        // 输出请求体的内容
        console.log('Request Body:', body);

        // 向客户端返回响应
        res.end('Received your request body!');
    });
});

// 监听端口
server.listen(3000, () => {
    console.log('Server is listening on port 3000');
});

解释

  1. 创建服务器:使用http.createServer创建一个HTTP服务器。
  2. 设置响应头:使用res.writeHead设置响应的状态码和类型。
  3. 监听data事件req.on('data', ...)用于监听数据片段。每当有新的数据到达时,该回调函数会被调用。数据片段是以Buffer对象的形式传递的。
  4. 收集数据:将每次接收到的数据片段添加到body数组中。
  5. 监听end事件req.on('end', ...)用于确定所有的数据都已经接收完毕。此时,可以将body数组中的所有数据片段拼接成完整的字符串。
  6. 处理请求体:在end事件的回调函数中,你可以对请求体进行任何你需要的操作,例如解析JSON数据或存储数据。
  7. 响应客户端:最后,使用res.end向客户端发送响应。

这样,你就可以成功地从HTTP请求体中读取并处理数据了。


是post的内容么? node.js是分段获取数据的,需要首先监听 on “data” 事件socket.on(‘data’, function(chunk) {});,把chunk拼起来,再监听一个end事件socket.on(‘end’, function() {}); 在end的时候处理拼起来的数据就是完整的post内容了,参见 http://nodejs.org/api/http.html#http_event_connect_1

要在Node.js中获取HTTP请求体,你需要监听request事件,并读取req对象的dataend事件。以下是一个示例代码,展示了如何获取HTTP请求体:

const http = require('http');

const server = http.createServer((req, res) => {
    if (req.method === 'POST') {
        let body = [];
        req.on('data', chunk => {
            body.push(chunk);
        }).on('end', () => {
            body = Buffer.concat(body).toString();
            console.log('Request Body:', body);
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.end('Request body received\n');
        });
    } else {
        res.writeHead(405, { 'Content-Type': 'text/plain' });
        res.end('Only POST requests are accepted\n');
    }
});

server.listen(3000, () => {
    console.log('Server is listening on port 3000');
});

解释

  1. 创建服务器:使用http.createServer()创建一个HTTP服务器。
  2. 处理请求
    • 检查请求方法是否为POST
    • 使用req.on('data', callback)监听data事件来收集请求体的片段。
    • 使用req.on('end', callback)监听end事件,当所有数据都被收集后调用该回调函数。
  3. 拼接请求体:将所有数据片段拼接成完整的请求体。
  4. 响应客户端:将请求体输出到控制台,并返回一个简单的响应。

这样,你就可以在Node.js中获取并处理HTTP请求体了。

回到顶部