如何在快递路由器中使用正文解析器?

hus*_*ain 7 javascript node.js express

我有一个包含对象的 post api,但我无法在控制台中打印它的抛出未定义我以为我缺少正文解析器但在添加正文解析器后我看到错误body-parser deprecated bodyParser: use individual json/urlencoded middlewares任何帮助将不胜感激。

路由.js

var express = require('express');
var bodyParser = require('body-parser');
var Diagram = require('./api/diagram/diagram.controller');
var router = express.Router();
router.post('/saveUpdateDiagram',bodyParser,function(req,res){
    console.log(req.body);
});
Run Code Online (Sandbox Code Playgroud)

应用程序.js

var express = require('express');
var path = require('path');
var app = express();
var bodyParser = require('body-parser');
var router = express.Router();
var route = require('./server/routes').router;
var mongoose = require('mongoose');
mongoose.connection.on('connected', function() {
    console.log('MongoDB connected ');
});


app.use(express.static(path.join(__dirname, 'public')));
app.use('/', route);
app.use(bodyParser.urlencoded({
    extended: false
}))
app.use(bodyParser.json())


app.listen(8760, function() {
    console.log('I am listening 8760...');
});
Run Code Online (Sandbox Code Playgroud)

Win*_*urb 8

您在 app.js 中使用 body-parser 很好。它是中间件,它被 app.use 加载,因此它将应用于每个传入的请求。

您可以在 routes.js 中删除它,使其看起来像这样:`

var express = require('express');
var Diagram = require('./api/diagram/diagram.controller');
var router = express.Router();
router.post('/saveUpdateDiagram', function(req,res){
    console.log(req.body);
});
Run Code Online (Sandbox Code Playgroud)

` 另外,尝试替换:

app.use(bodyParser.urlencoded({
    extended: false
}))
Run Code Online (Sandbox Code Playgroud)

和:

app.use(bodyParser.urlencoded({extended: true}));
Run Code Online (Sandbox Code Playgroud)

  • 我从应用程序中删除了 body-parser 并添加到路由器中,并与应用程序`router.use(bodyParser.urlencoded({extended: false }))' 使用相同,它对我有用 (3认同)