Express 将抛出错误作为“ body 解析器不赞成未定义的扩展”

在我的节点应用程序中,我使用 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!');
});

错误:

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

能帮我理解这个问题吗?

141674 次浏览

这个错误说明您需要像下面这样为 body-parser 提供扩展选项:

app.use(bodyParser.urlencoded({ extended: false }))

body-parser默认值将在下一个主版本中改变开始,您必须显式地为 bodyParser.urlencoded()设置 extended。例如:

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

由于 express4.16.0,你还可以:

app.use(express.urlencoded({ extended: true }))

注意: 在 express version => 4.16.0中,body-parser中间件在 express.urlencoded() express.json()方法下被添加回来

可用作:

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

设置限制50 MB,以避免数据处理错误 50mb 是为了帮助您传递 image Data throw url

  app.use(bodyParser.json({
limit : '50mb'    ///////// LIMIT for JSON
}));


app.use(bodyParser.urlencoded({
limit : '50mb', ///////// LIMIT for URL ENCODE (image data)
extended : true
}));

如果你正在使用 节点 v16.xx.x“ Express”: “ ^ 4.17. x”,就没有必要再次使用 body Perser。默认情况下,它现在与 Express 合并在一起。 只要做到以下几点:

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

特快版本4.16.0开始,需要在 Urlencode ()中传入 延期属性

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

请参阅 npm.js 文档页面中的 sample: https://www.npmjs.com/package/body-parser#expressconnect-top-level-generic

如果你正在使用 节点 v16.xx.x“ Express”: “ ^ 4.17. x”以上,没有必要再次使用 body Perser。默认情况下,它现在与 快递合并在一起。 只要做到以下几点:

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

如果您使用的是节点版本 v13.12.0:

app.use(express.urlencoded({ extended: true }))

如果你是2020年圣诞节后来这里的话,你只需要在你的明确声明和路线声明 在此输入图像描述之前把米德拉沃斯的东西整理好

如果你面对 'bodyParser' is deprecated.

照做就是了

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

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

不要使用 body-parser

它现在内置了新版本的 Express,你可以像这样只使用 快递访问请求主体:

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

因此,现在可以使用 npm uninstall body-parser卸载 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);
});

您现在不需要显式安装“ body-parser”

app.use(express.json());