表达错误,因为`body-parser已弃用undefined extended`

3gw*_*ain 107 node.js express

在我的节点应用程序中,我使用快递.一切正常,但我得到的错误cmd.我用的都是更新后的模块......

我的代码:

var express = require('express');
var bodyParser = require('body-parser');
var jade = require('jade');
var app = express();
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/public'));


app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded()); // to support URL-encoded bodies


app.get('/',function(req,res){
    res.render('index.jade');
});

app.get('/login',function(req,res){
    res.render('index.jade');
});

app.post('/login',function(req,res){
    console.log(req.body);
});

app.get('/signup',function(req,res){
    res.render('signup.jade');
});

var env = process.env.PORT || 3000;


app.listen(env, function(req, res){
    console.log('i am working!');
});
Run Code Online (Sandbox Code Playgroud)

错误:

D:\myLogin>node app
body-parser deprecated undefined extended: provide extended option app.js:11:20 //why i am getting this?
i am working!
{ username: 'jbarif@gmail.com', password: 'pass' } // i am getting response
Run Code Online (Sandbox Code Playgroud)

可以帮我理解这个问题吗?

msc*_*dex 224

您必须明确设置extended,bodyParser.urlencoded()因为默认值将在下一个主要版本更改body-parser.例:

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

  • 这是做什么的? (8认同)
  • @SamarthAgarwal根据[自述文件](https://github.com/expressjs/body-parser/tree/3f1b02247702c2966d33ee73610a98d54cf32fe8#bodyparserurlencodedoptions),它使用`qs`模块解析主体,允许嵌套数组,如语法解析如`test [foo] [bar] = baz`(变为`''test':{'foo':{'bar':'baz'}}}`) (4认同)

Dhi*_*iya 30

你好只是想注意Express it-self提供urlencoded和json方法(支持body方法).您也可以使用它而不是身体解析器,如下所示.

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

注意: - 请确保您有快递:"^ 4.15.2".我也在部署服务器上测试它.

  • 那么,不需要“npm i body-parser”? (2认同)
  • 这是正确的,不要安装 body-parser,它已经包含在内 (2认同)

mfr*_*tas 14

错误说你需要为body-parser提供扩展选项,如下所示:

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


Abr*_*ham 12

不要使用主体解析器

它现在内置于新版本的 Express 中,您可以像这样仅使用express访问请求正文:

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-parsernpm 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)


tMa*_*wiz 7

Express版本 4.16.0 开始,您需要在bodyParser.urlencoded()内传递扩展属性

//  parse JSON-encoded bodies and URL-encoded bodies
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
Run Code Online (Sandbox Code Playgroud)

请参阅 npm.js 文档页面以获取示例:https://www.npmjs.com/package/body-parser#expressconnect-top-level-generic

如果您使用的是Node v16.xx.x"express": "^4.17.x"及更高版本,则无需再次使用 bodyPerser。现在它默认与express合并。只需执行以下操作:

//  parse JSON-encoded bodies and URL-encoded bodies
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
Run Code Online (Sandbox Code Playgroud)


Hap*_*tel 7

如果你面临'bodyParser' is deprecated.

做就是了

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

注意:如果您使用的是4.16.0Express 版本或更高版本。