我有以下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()吗?


当前回答

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())

var port = 9000;

app.post('/post/data', function(req, res) {
    console.log('receiving data...');
    console.log('body is ',req.body);
    res.send(req.body);
});

// start the server
app.listen(port);
console.log('Server started! At http://localhost:' + port);

这对你有帮助。我假设你在json中发送body。

其他回答

这也可以在没有体解析器依赖的情况下实现,侦听request:data和request:end并在请求结束时返回响应,请参阅下面的代码示例。裁判:https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/请求主体

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

app.post('/', function(request, response) {

    // push the data to body
    var body = [];
    request.on('data', (chunk) => {
      body.push(chunk);
    }).on('end', () => {
      // on end of data, perform necessary action
      body = Buffer.concat(body).toString();
      response.write(request.body.user);
      response.end();
    });
});

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

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

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

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

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

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())

var port = 9000;

app.post('/post/data', function(req, res) {
    console.log('receiving data...');
    console.log('body is ',req.body);
    res.send(req.body);
});

// start the server
app.listen(port);
console.log('Server started! At http://localhost:' + port);

这对你有帮助。我假设你在json中发送body。

通过以下命令安装正文解析器

$ npm install --save body-parser

配置正文解析器

const bodyParser = require('body-parser');
app.use(bodyParser);
app.use(bodyParser.json()); //Make sure u have added this line
app.use(bodyParser.urlencoded({ extended: false }));

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

“application / json内容类型: