【发布时间】:2017-06-07 00:56:51
【问题描述】:
我正在运行这个简单的 http node.js 服务器:
var http = require('http');
http.createServer(function (req, res) {
}).listen(6000);
您能解释一下,我如何读取传入请求的正文,以便在控制台上将其可视化?
【问题讨论】:
标签: node.js
我正在运行这个简单的 http node.js 服务器:
var http = require('http');
http.createServer(function (req, res) {
}).listen(6000);
您能解释一下,我如何读取传入请求的正文,以便在控制台上将其可视化?
【问题讨论】:
标签: node.js
您可以将请求流通过管道传输到标准输出:
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] 之类的东西 - 它已完全解析并可用。
【讨论】: