【问题标题】:Accessing raw POST data in Express在 Express 中访问原始 POST 数据
【发布时间】:2018-02-28 12:43:37
【问题描述】:

我正在尝试在 Express 中编写一个非常简单的 Hello World 程序,它会输出有关当前 HTTP 请求的一些基本数据。

对于 POST 请求,我想查看原始的 POST 正文。

const express = require('express');
const app = express();

function handleRequest(req, res) {
    console.log('\n-- INCOMING REQUEST AT ' + new Date().toISOString());
    console.log(req.method + ' ' + req.url);
    console.log(req.body);
    res.send('Hello World!');
}

app.all('/*', (req, res) => handleRequest(req, res));
app.listen(3000, () => console.log('Example app listening on port 3000!'));

当我从 Postman 发出任何类型的 POST 请求时,req.body 设置为 undefined。为什么req.body 是空的?如何打印原始 POST 数据?我不需要 POST 正文的解析版本,只需要原始数据。

【问题讨论】:

标签: node.js express


【解决方案1】:

要阅读帖子请求的正文,您需要body-parser. 如果你还需要解析 multipart/form-data 你需要multer.

在你 npm 安装它们之后:

const express = require('express');
const multer = require('multer');
const bodyParser = require('body-parser');
const upload = multer();
const app = express();

// create application/json parser
app.use(bodyParser.json());

// create application/x-www-form-urlencoded parser
app.use(bodyParser.urlencoded({ extended: false }));

function handleRequest(req, res) {
    console.log('\n-- INCOMING REQUEST AT ' + new Date().toISOString());
    console.log(req.method + ' ' + req.url);
    console.log(req.body);
    res.send('Hello World!');
}

app.post('/*', upload.any(), (req, res) => handleRequest(req, res));
app.all('/*', (req, res) => handleRequest(req, res));
app.listen(3000, () => console.log('Example app listening on port 3000!'));

【讨论】:

  • 在某些情况下,这似乎仍然会产生空对象。当我在 Postman 中使用 'form-data' 选项时,它不起作用。
  • 你可以试试extended: true吗?如果你想发布 multipart/form-data 你需要 multer - npmjs.com/package/multer
  • 仍然不是原始的 POST 数据,但这也可以满足我的需求。谢谢!
【解决方案2】:
  1. 如果您需要解析 url 编码(非多部分)表单数据以及 JSON,请尝试添加:

    var bodyParser = require('body-parser');
    
    
    // Put these statements before you define any routes.
    app.use(bodyParser.urlencoded({ extended: true}));
    app.use(bodyParser.json());
    
  2. 要处理多部分表单数据,bodyParser.urlencoded() 正文解析器将不起作用。您可以参考this 从表单数据中提取数据的替代方法

【讨论】:

    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 2012-11-27
    • 2018-03-07
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    相关资源
    最近更新 更多