我试图在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主体,只需要原始数据。
答案 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)
如果您需要解析url编码(非多部分)表单数据以及JSON,请尝试添加:
{{1}}
要处理多部分表单数据,bodyParser.urlencoded()正文解析器将无法正常工作。您可以参考this以获取从表单数据中提取数据的替代方法