bodyParser已弃用快递4

Mel*_*991 372 middleware node.js express

我正在使用快递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);
Run Code Online (Sandbox Code Playgroud)

Ben*_*une 683

这意味着截至2014-06-19,已弃用bodyParser() 构造函数.

app.use(bodyParser()); //Now deprecated
Run Code Online (Sandbox Code Playgroud)

您现在需要单独调用这些方法

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());
Run Code Online (Sandbox Code Playgroud)

等等.

如果您仍然urlencoded需要使用警告

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

extended现在的配置对象的关键需要明确的被传递,因为它现在已经没有默认值.

如果您使用Express> = 4.16.0,则已在方法express.json()和下重新添加了body解析器express.urlencoded().

  • `extended`做什么? (22认同)
  • bodyParser 本身现已被标记为已弃用,并且可作为 Express 的一部分使用,请参阅 Sridhar 的回答 /sf/answers/4192452141/,`express.json()` (14认同)
  • 我解释扩展为true的最好方法是不使用扩展意味着`curl --data'用户[email] = foo&user [密码] = bar"localhost:3000/login"将由服务器在`req.body`中接收作为`{user [email]:"foo",...}`而``req.body`将是`{user:{email:"foo",...}}```extended:true`. (8认同)
  • @eslammostafa 您可以使用 bodyparser,只是不能调用构造函数。您需要调用每个单独的方法。 (2认同)
  • @BenFortune感谢Ben,我明白了,我只是担心/ tmp的事情,但现在我再次检查,只有当我们使用bodyParser来解析多部分表格时才会发生/ tmp问题,http://andrewkelley.me/post/do -not-use-bodyparser-with-express-js.html我将使用强力然后用于多部分表单. (2认同)

Sri*_*har 183

如果您使用 express > 4.16,则可以使用express.json()express.urlencoded()

express.json()express.urlencoded()中间件已被添加到提供请求主体的解析支持外的开箱。这使用expressjs/body-parser下面的模块模块,因此当前需要单独使用模块的应用程序可以切换到内置解析器。

Source Express 4.16.0 - 发布日期:2017-09-28

有了这个,

const bodyParser  = require('body-parser');

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

变成,

const express = require('express');

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

  • 意味着我们不再需要安装主体解析器了? (10认同)
  • 是的。我们不将其作为单独的包装,因为它现在作为快递的一部分提供。 (10认同)

sma*_*ajl 150

想要零警告吗?像这样使用它:

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

Explanation:extended不推荐使用该选项的默认值,这意味着您需要显式传递true或false值.

  • 这不是它的工作方式.您需要分别对json和urlencoded使用app.use() (6认同)
  • 我使用这个,仍然收到“body-parser deprecated”消息。`app.use(bodyParser.json()).use(bodyParser.urlencoded({extended: true }));` (4认同)

Pri*_*hvi 35

甚至我也面临同样的问题。我提到的以下更改解决了我的问题。

如果您使用的是Express 4.16+版本,则

  • 您可能在代码中添加了如下所示的一行:

app.use(bodyparser.json()); //utilizes the body-parser package
Run Code Online (Sandbox Code Playgroud)

  • 您现在可以将上面的行替换为:

app.use(express.json()); //Used to parse JSON bodies
Run Code Online (Sandbox Code Playgroud)

由于express.json() 中的代码基于 bodyparser.json(),因此这不应在您的应用程序中引入任何破坏性更改。

  • 如果您的环境中还有以下代码:

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

  • 您可以将上面的行替换为:

app.use(express.urlencoded()); //Parse URL-encoded bodies
Run Code Online (Sandbox Code Playgroud)

  • 如果您收到警告说您仍然需要传递extendedexpress.urlencoded()then,请将上面的代码更新为:

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

最后的注意事项:

如果您使用的是 Express 4.16+,您可能不需要将额外的 body-parser 包安装到您的应用程序中。有许多教程包含 body-parser 的安装,因为它们的日期早于 Express 4.16 发布。


Abr*_*ham 16

不要使用正文解析器

如果您使用的快递4.16+你可以做到这一点,就像这跟快递

app.use(express.urlencoded({extended: true}));
app.use(express.json()) // To parse the incoming requests with JSON payloads
Run Code Online (Sandbox Code Playgroud)

您现在可以使用卸载 body-parser npm uninstall body-parser



要获取 POST 内容,您可以使用 req.body

app.post("/yourpath", (req, res)=>{

    var postData = req.body;

    //Or if this doesn't work

    var postData = JSON.parse(req.body);
});
Run Code Online (Sandbox Code Playgroud)


小智 11

在旧版本的express中,我们不得不使用:

app.use(express.bodyparser()); 
Run Code Online (Sandbox Code Playgroud)

因为body-parser是node和express之间的中间件.现在我们必须使用它:

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


Par*_*val 7

body-parser是一段快速中间件,它读取表单的输入并将其存储为可通过req.body 'body-parser' 访问的javascript对象必须安装(via 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
Run Code Online (Sandbox Code Playgroud)

extended设置为true时,放气(压缩)的物体将膨胀; 当extended设置为false时,放气的身体会被拒绝.


Lak*_*hna 7

而不是bodyParser.json(),只需使用express.json(),您不想安装body-parser

例如,

const express = require("express");

const app = express();
app.use(express.json());
Run Code Online (Sandbox Code Playgroud)