我有以下Node.js代码:

var express = require('express');
var app = express.createServer(express.logger());
app.use(express.bodyParser());

app.post('/', function(request, response) {
    response.write(request.body.user);
    response.end();
});

现在如果我POST一些东西:

curl -d user=Someone -H Accept:application/json --url http://localhost:5000

我得到了某人。现在,如果我想要得到完整的请求体呢?我试着做response.write(request.body),但Node.js抛出一个异常,说“第一个参数必须是一个字符串或Buffer”,然后进入一个“无限循环”,异常说“发送后不能设置标头”;这也是真的,即使我做var reqBody = request.body;然后写入response.write(reqBody)。

这里的问题是什么?

另外,我可以只得到原始请求而不使用express.bodyParser()吗?


当前回答

您使用以下代码来记录post数据:

router.post("/users",function(req,res){
    res.send(JSON.stringify(req.body, null, 4));
});

其他回答

接受的答案只适用于与JSON格式兼容的主体。一般来说,主体可以使用

app.use(
  Express.raw({
    inflate: true,
    limit: '50mb',
    type: () => true, // this matches all content types
  })
);

就像贴在这里的。要求的事情。body具有Buffer类型,可以转换为所需的格式。

例如,通过:

let body = req.body.toString()

或通过以下方式转换成JSON:

let body = req.body.toJSON();

我对JS和ES绝对是新手,但对我来说似乎是这样的:

JSON.stringify(req.body)

如果有什么问题请告诉我!

试试这个:

response.write(JSON.stringify(request.body));

这将获取bodyParser为您创建的对象并将其转换回字符串并将其写入响应。如果你想要确切的请求体(具有相同的空格等),你需要在请求之前将数据和结束侦听器附加到请求上,并逐块构建字符串,就像你在来自connect的json解析源代码中看到的那样。

在我的情况下,我错过了设置头:

“application / json内容类型:

您不应该使用体解析器,它已被弃用。试试这个吧

Const express = require('express') Const app = express() app.use(express.json()) //注意express.json。json中间件

app.use()函数用于在指定的路径上挂载指定的中间件函数。它主要用于为应用程序设置中间件。

现在要访问主体,只需执行以下操作

App.post ('/', (req, res) => { console.log (req.body) })