在Express中访问原始POST数据

时间:2018-02-28 12:43:37

标签: node.js express

我试图在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!'));

当我从邮差发送任何类型的POST请求时,req.body设置为undefined。为什么req.body为空?如何打印原始POST数据?我不需要解析版本​​的POST主体,只需要原始数据。

2 个答案:

答案 0 :(得分:3)

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

在你安装它们之后

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!'));

答案 1 :(得分:3)

  1. 如果您需要解析url编码(非多部分)表单数据以及JSON,请尝试添加:

    {{1}}
  2. 要处理多部分表单数据,bodyParser.urlencoded()正文解析器将无法正常工作。您可以参考this以获取从表单数据中提取数据的替代方法