bodyParser已弃用快递4

时间:2014-06-20 14:48:08

标签: node.js express middleware

我正在使用快递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);

12 个答案:

答案 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 directoryinstall npm packagesstart 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

这些错误将被删除。请按照以下步骤操作:-

  1. app.use(bodyParser.urlencoded({extended: true})); // 这将有助于编码。
  2. app.use(bodyParser.json()); // 这将支持 json 格式

它会运行。

快乐编码!

答案 11 :(得分:-1)

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

我有同样的问题,但这对我有用。您可以尝试此扩展部分。