如何在快速路由器中使用正文解析器?
Posted
技术标签:
【中文标题】如何在快速路由器中使用正文解析器?【英文标题】:How to use body-parser in express router? 【发布时间】:2017-02-20 11:33:06 【问题描述】:我有一个包含对象的 post api,但我无法在控制台中打印它的抛出未定义我以为我缺少 body-parser 但在添加 body-parser 后我看到错误 body-parser deprecated bodyParser: use individual json/urlencoded middlewares
任何帮助将不胜感激。
routes.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);
);
app.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...');
);
【问题讨论】:
尝试使用您正在传递的bodyParser
。由于您在服务器级别(通过app.use(...)
)使用bodyParser,因此您已经加载了中间件。
【参考方案1】:
您在 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);
);
` 另外,尝试替换:
app.use(bodyParser.urlencoded(
extended: false
))
与:
app.use(bodyParser.urlencoded(extended: true));
【讨论】:
我从 routes.js 中删除了 body-parser ,但我仍然在控制台中打印 undefined 不知道为什么 根据我编辑中的示例,查看设置扩展为 true 是否有效。 我从应用程序中删除了 body-parser 并添加到路由器并使用与应用程序相同的 `router.use(bodyParser.urlencoded(extended: false ))' 它对我有用【参考方案2】:这意味着使用 bodyParser()
构造函数已被弃用,截至 2014-06-19。
app.use(bodyParser()); //Now deprecated You now need to call the methods separately
app.use(bodyParser.urlencoded());
app.use(bodyParser.json()); //And so on.
如果您仍然收到带有 urlencoded 的警告,则需要使用
app.use(bodyParser.urlencoded(
extended: true
))
扩展配置对象键现在需要显式传递,因为它现在没有默认值,如 over here. 所说
【讨论】:
我在app.js中单独调用方法【参考方案3】:您在 app.js 中使用 body-parser 没问题。它是中间件,它加载了 app.use 但 问题是您使用 app.use('/', route); 的位置;它应该放在下面 app.use(bodyParser.urlencoded( 扩展:真 ));
【讨论】:
这是我的问题。【参考方案4】:简单的方法, 使用以下命令安装 body-parser
npm install -g body-parser
然后在你的应用程序中使用它
var bodyParser = require("body-parser");
然后你可以在你的应用中使用它添加以下代码行
app.use(bodyParser.urlencoded(extended: true));
【讨论】:
body 解析器现已内置。以上是关于如何在快速路由器中使用正文解析器?的主要内容,如果未能解决你的问题,请参考以下文章