如何在Express应用程序中使用JSON POST数据

72qzrwbm  于 2022-12-15  发布在  其他
关注(0)|答案(7)|浏览(130)

我将以下JSON字符串发送到服务器。

(
        {
        id = 1;
        name = foo;
    },
        {
        id = 2;
        name = bar;
    }
)

在服务器上我有这个。

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

    console.log("Got response: " + response.statusCode);

    response.on('data', function(chunk) {
        queryResponse+=chunk;
        console.log('data');
    });

    response.on('end', function(){
        console.log('end');
    });
});

当我发送字符串时,它显示我得到了一个200响应,但是另外两个方法从来没有运行过,这是为什么呢?

5jvtdoz2

5jvtdoz21#

我认为您混淆了response对象和request对象的使用。
response对象用于将HTTP响应发送回调用客户端,而您希望访问request的主体,请参阅answer,它提供了一些指导。
如果您使用的是有效的JSON并使用Content-Type: application/json对其进行POST,那么您可以使用bodyParser中间件来解析请求主体,并将结果放在路由的request.body中。

针对Express 4.16+的更新

从版本4.16.0开始,提供了一个新的express.json()中间件。

var express = require('express');

var app = express();

app.use(express.json());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
   response.send(request.body);    // echo the result back
});

app.listen(3000);

针对Express 4.0 - 4.15进行了更新

在v4之后,主体解析器被拆分到其自己的npm包中,需要单独安装npm install body-parser

var express = require('express')
  , bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
   response.send(request.body);    // echo the result back
});

app.listen(3000);

对于早期版本的Express(〈4)

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

app.use(express.bodyParser());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
  response.send(request.body);    // echo the result back
});

app.listen(3000);

沿着以下方式进行测试:

$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}
qcuzuvrc

qcuzuvrc2#

对于Express v4+
从npm安装主体解析器。

$ npm install body-parser

https://www.npmjs.org/package/body-parser#installation

var express    = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res, next) {
  console.log(req.body) // populated!
  next()
})
dluptydi

dluptydi3#

对于在req.body中获取空对象的用户
我忘了在请求中设置headers: {"Content-Type": "application/json"}。更改它解决了问题。

jtjikinw

jtjikinw4#

@丹尼尔Thompson提到他忘记添加{“内容类型”:“application/json”}在request中。他能够更改请求,但是,更改请求并不总是可能的(我们在这里是在服务器上工作)。
在我的例子中,我需要强制content-type:text/plain将被解析为json。
如果无法更改请求的内容类型,请尝试使用以下代码:

app.use(express.json({type: '*/*'}));

与全局使用express.json()不同,我更喜欢只在需要的地方应用它,例如在POST请求中:

app.post('/mypost', express.json({type: '*/*'}), (req, res) => {
  // echo json
  res.json(req.body);
});

bxpogfeg

bxpogfeg5#

const express = require('express');
let app = express();
app.use(express.json());

这个app.use(express.json)现在允许您读取传入的post JSON对象

ruoxqz4g

ruoxqz4g6#

有时候你不需要第三方库来解析文本中的JSON,有时候你只需要下面的JS命令,先试试吧:

const res_data = JSON.parse(body);
dpiehjr4

dpiehjr47#

初学者的错误...我在本地模块中使用app.use(express.json());,而不是在主文件(入口点)中使用。

相关问题