【问题标题】:Reading requests body Nodejs读取请求正文 Nodejs
【发布时间】:2017-06-07 00:56:51
【问题描述】:

我正在运行这个简单的 http node.js 服务器:

var http = require('http');

http.createServer(function (req, res) {

}).listen(6000);

您能解释一下,我如何读取传入请求的正文,以便在控制台上将其可视化?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    您可以将请求流通过管道传输到标准输出:

    var http = require('http');
    
    http.createServer(function (req, res) {
      req.pipe(process.stdout);
    }).listen(6000);
    

    更新:如果正文包含 JSON 并且您想反序列化它,那么您可以从流数据块中构建一个字符串并在其上使用 JSON.parse()(记得尝试一下/catch 块或使用 tryjson) 或者您可以为此使用经过测试的解决方案 - 因为如果您想解析 JSON 正文,那么我怀疑您可能需要做更多的事情。

    Express 和 body-parser 的示例:

    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    app.use(bodyParser.json());
    app.use((req, res) => {
      // req.body is deserialized body:
      console.log(req.body);
    });    
    app.listen(6000);
    

    或使用较旧的语法:

    var express = require('express');
    var bodyParser = require('body-parser');
    var app = express();
    app.use(bodyParser.json());
    app.use(function (req, res) {
      // req.body is deserialized body:
      console.log(req.body);
    });    
    app.listen(6000);
    

    你可以像这样用 curl 测试它:

    curl -X POST -H 'Content-type: application/json' -d '{"a":1,"b":2}' localhost:6000
    

    打印出来:

    { a: 1, b: 2 }
    

    您可以看到它是通过对象键周围缺少引号来解析的。

    当然,您可以使用 req.body.someArray[3] 之类的东西 - 它已完全解析并可用。

    【讨论】:

    • 谢谢,如果body中包含json对象,我该如何反序列化呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多