Nodejs中我想看POST的所有内容应该怎么写呀? CONSOLE.LOG()不能输出来 PARSE后的内容么?

Nodejs中我想看POST的所有内容应该怎么写呀? CONSOLE.LOG()不能输出来 PARSE后的内容么?

var http = require(‘http’); var querystring = require(‘querystring’); var server = http.createServer(function(req, res) { var post = ‘’; req.on(‘data’, function(chunk) { post += chunk; }); req.on(‘end’, function() { post = querystring.parse(post); console.log(text); res.write(post.title); res.write(post.text); res.end(); }); }).listen(3000);


7 回复

当然可以。根据你提供的代码片段,你的目标是在 Node.js 中处理一个 POST 请求,并将解析后的数据打印出来。你提到的 console.log() 无法输出解析后的数据是因为你在 console.log() 中使用了未定义的变量 text。正确的做法是直接打印 post 对象。

以下是一个改进的版本,展示了如何正确地捕获、解析并打印 POST 请求的数据:

var http = require('http');
var querystring = require('querystring');

var server = http.createServer(function(req, res) {
    var post = '';

    // 当接收到数据时,将其添加到 post 变量中
    req.on('data', function(chunk) {
        post += chunk;
    });

    // 当请求结束时,解析数据并打印
    req.on('end', function() {
        post = querystring.parse(post);

        // 打印解析后的 POST 数据
        console.log(post);

        // 向客户端返回数据
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write(post.title || '');
        res.write(post.text || '');
        res.end();
    });
});

server.listen(3000, function() {
    console.log('Server is running on port 3000');
});

解释:

  1. 创建 HTTP 服务器:使用 http.createServer() 创建一个新的 HTTP 服务器。
  2. 初始化 POST 数据缓冲区:定义一个空字符串 post 用于存储接收到的数据。
  3. 监听数据事件:当接收到数据时(req.on('data')),将其添加到 post 变量中。
  4. 监听结束事件:当请求结束时(req.on('end')),调用 querystring.parse() 解析接收到的 POST 数据。
  5. 打印解析后的数据:使用 console.log(post) 打印解析后的数据。
  6. 响应客户端:设置响应头并发送解析后的数据给客户端。

这样,你可以看到完整的解析后的 POST 数据,并且也可以将这些数据发送回客户端。希望这对你有所帮助!


querystring.parse是得到get的数据 得不到post的数据。

那我怎样得到POST数据呀?

1、通过formidable模块开parse一下就可以获得post上来的数据 2、直接读取request下的socket读到的数据 var first = request.socket.ondata.arguments[0],//传入socket接收的buffer对象(slowbuffer) second = request.socket.ondata.arguments[1],//buffer对象偏移量(number) thrid = request.socket.ondata.arguments[2];//长度(number) if(request.method==“POST”){ var formdata = first.slice(second,thrid).toString().split("\r\n\r\n"); var fields = querystring.parse(formdata[1]); } 这个是我使用的两种方法

多谢

res.write(post.text); 我这段写的是不是有点问题,我传进去的不是STRING 或者buffer么?

在你的代码中,有几个问题需要修正:

  1. console.log中的变量名应该是post而不是text
  2. 使用querystring.parse时,如果POST的数据是JSON格式,那么应该使用JSON.parse

下面是一个修正后的示例代码,展示了如何正确地处理POST请求并打印出所有内容:

const http = require('http');
const querystring = require('querystring');

const server = http.createServer((req, res) => {
    if (req.method === 'POST') {
        let body = '';

        req.on('data', (chunk) => {
            body += chunk.toString(); // 将Buffer转换为字符串
        });

        req.on('end', () => {
            try {
                const parsedBody = JSON.parse(body); // 假设POST数据是JSON格式
                console.log(parsedBody); // 输出解析后的POST数据
                res.writeHead(200, { 'Content-Type': 'text/plain' });
                res.write(parsedBody.title);
                res.write(parsedBody.text);
                res.end();
            } catch (error) {
                console.error('Failed to parse POST data:', error);
                res.writeHead(400, { 'Content-Type': 'text/plain' });
                res.end('Bad Request');
            }
        });
    } else {
        res.writeHead(405, { 'Content-Type': 'text/plain' });
        res.end('Method Not Allowed');
    }
});

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

解释:

  1. req.on('data', ...):当接收到数据时,将其添加到body中。注意这里假设数据是字符串形式。
  2. req.on('end', ...):当请求结束时,尝试将body解析为JSON格式,并打印出来。
  3. 错误处理:使用try...catch捕获解析错误,并返回适当的HTTP状态码。
  4. console.log:现在应该能正确输出解析后的POST数据。

如果你确定POST数据是x-www-form-urlencoded格式,可以继续使用querystring.parse,但大多数现代API倾向于使用JSON格式。

回到顶部