正文解析器在 Express 路由器中记录空对象

body parser logging empty object in express router

出于某种原因,我可以在我的路线

的快递服务器中看到我的 req.body
req body is [Object: null prototype] { '{"password":"xxxxxxxx"}': '' }

但是当我登录 req.body.password(对象键)时,我得到

req body is undefined

这是我的索引路由器,供我在 Express 应用程序中参考

var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser')
const path = require('path');

/* GET adminPanel. */
router.post('/authenticate', function(req, res, next) {

  console.log('req body is',req.body.password)
  res.send("passconfirmed");
});

module.exports = router;

如果您正在使用 body-parser

在路由中使用解析后的数据之前,您必须启用正文解析器。

在导入所有库的主模块中,需要声明 express 才能使用 body-parser 中间件。

const express = require('express')
const bodyparser = require('body-parser')
const app = express()
app.use(bodyparser.json())
app.use(bodyparser.urlencoded({ extended : true }))
...
//here comes your routes

包含 bodyparser middleware 后,您可以在路由中使用解析后的数据。

请注意,如果您使用的是 express 版本 >= 4.16,正文解析器会与 express 捆绑在一起。您只需将代码更改为:

const express = require('express')
const app = express()
app.use(express.json()); //this line activates the bodyparser middleware
app.use(express.urlencoded({ extended: true }));

这样您就可以安全地删除 body-parser 包。

要访问正文的内容,请在处理程序之前在中间件中解析传入的请求正文,在 req.body 属性.

下可用

您需要安装 body-parser 包。

npm i body-parser --save

现在在您的项目中导入 body-parser。 它应该在你定义的路由函数之前被调用。

const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser')
const path = require('path');

app.use(bodyParser.json());
app.use(bodyparser.urlencoded({ extended : true }));

/* GET adminPanel. */
router.post('/authenticate', function(req, res, next) {

  console.log('req body is',req.body.password)
  res.send("passconfirmed");
});

module.exports = router;