我正在使用快递4.0,我知道身体解析器已被取出快递核心,我使用推荐的替代品,但是我得到了
body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12
body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29
我在哪里可以找到这个假设的中间件?或者我不应该收到此错误?
var express = require('express');
var server = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var passport = require('./config/passport');
var routes = require('./routes');
mongoose.connect('mongodb://localhost/myapp', function(err) {
if(err) throw err;
});
server.set('view engine', 'jade');
server.set('views', __dirname + '/views');
server.use(bodyParser());
server.use(passport.initialize());
// Application Level Routes
routes(server, passport);
server.use(express.static(__dirname + '/public'));
server.listen(3000);
答案 0 :(得分:649)
这表示自2014-06-19起,使用bodyParser()
构造函数一直是deprecated。
app.use(bodyParser()); //Now deprecated
您现在需要单独调用方法
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
等等。
如果您仍然收到urlencoded
的警告,则需要使用
app.use(bodyParser.urlencoded({
extended: true
}));
现在需要显式传递extended
配置对象键,因为它现在没有默认值。
如果您使用Express> = 4.16.0,则已在方法express.json()
和express.urlencoded()
下重新添加了正文解析器。
答案 1 :(得分:147)
想要零警告?像这样使用它:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
解释:不推荐使用extended
选项的默认值,这意味着您需要显式传递true或false值。
答案 2 :(得分:29)
即使我也遇到了同样的问题。我提到的以下更改解决了我的问题。
如果您使用的是 Express 4.16+ 版本,那么
app.use(bodyparser.json()); //utilizes the body-parser package
app.use(express.json()); //Used to parse JSON bodies
这不应在您的应用程序中引入任何重大更改,因为 express.json() 中的代码基于 bodyparser.json()。
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.urlencoded()); //Parse URL-encoded bodies
最后的注意事项:
如果您使用 Express 4.16+,您可能不需要将额外的 body-parser 包安装到您的应用程序中。有很多教程都包含 body-parser 的安装,因为它们的日期早于 Express 4.16 发布。
答案 3 :(得分:18)
如果您使用快递> 4.16
,则可以使用express.json()
和express.urlencoded()
已添加
express.json()
和express.urlencoded()
中间件,以提供现成的请求正文解析支持。这使用了下面的expressjs/body-parser
模块模块,因此当前单独需要该模块的应用可以切换到内置解析器。
来源 Express 4.16.0 - Release date: 2017-09-28
有了这个,
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
成为
const express = require('express');
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
答案 4 :(得分:10)
在旧版本的express中,我们必须使用:
app.use(express.bodyparser());
因为body-parser是节点和节点之间的中间件 表达。现在我们必须使用它:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
答案 5 :(得分:6)
代替bodyParser.json()
,只需使用express.json()
,
您不想安装 body-parser
举个例子,
const express = require("express");
const app = express();
app.use(express.json());
答案 6 :(得分:5)
body-parser是一个快速中间件 读取表单的输入并将其存储为javascript 可通过
req.body
访问的对象 必须安装'body-parser'(通过npm install --save body-parser
)有关详细信息,请参阅:https://github.com/expressjs/body-parser
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
当extended
设置为true时,放气(压缩)的物体将膨胀;当extended
设置为false时,放气的身体会被拒绝。
答案 7 :(得分:3)
不要使用正文解析器
如果您使用的是 Express 4.16+,您可以这样做:
app.use(express.urlencoded({extended: true}));
app.use(express.json()) // To parse the incoming requests with JSON payloads
答案 8 :(得分:1)
我发现在添加
的同时app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
有帮助,有时候你的查询问题决定了如何处理它。
例如,您的参数可能会在网址中而不是在正文中传递
在这种情况下,您需要同时捕获 body 和 url 参数,并使用可用的参数(在下面的情况下优先选择body参数)< / p>
app.route('/echo')
.all((req,res)=>{
let pars = (Object.keys(req.body).length > 0)?req.body:req.query;
res.send(pars);
});
答案 9 :(得分:1)
您对使用快速生成器有什么看法,它会生成骨架项目,without deprecated messages
出现在您的日志中
运行此命令
npm install express-generator -g
现在,通过在your Node projects folder
中输入此命令来创建新的Express.js启动应用程序。
express node-express-app
该命令告诉express生成名为node-express-app
的新Node.js应用程序。
然后Go to the newly created project directory
,install npm packages
和start the app
使用命令
cd node-express-app && npm install && npm start
答案 10 :(得分:1)
body-parser 弃用 bodyParser:使用单独的 json/urlencoded 中间件 node_modules\express\lib\router\layer.js:95:5
表示不推荐使用的 req.host:使用 req.hostname 代替 node_modules\body-parser\index.js:100:29
body-parser deprecated undefined extended:提供扩展选项 node_modules\body-parser\index.js:105:29
无需更新 express 或 body-parser
这些错误将被删除。请按照以下步骤操作:-
它会运行。
快乐编码!
答案 11 :(得分:-1)
app.use(bodyParser.urlencoded({extended: true}));
我有同样的问题,但这对我有用。您可以尝试此扩展部分。