我正在使用express 4.0,我知道主体解析器已经从express核心中取出,我正在使用推荐的替换,但我正在获得

bodyParser:使用单独的json/urlencoded中间件server.js:15:12 对扩展解析显式指定"extended: true" 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);

当前回答

体解析器是一个表达中间件 读取表单的输入并将其存储为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

当extend设置为true时,则放气(压缩)体将被充气;当extended设置为false时,将拒绝放气体。

其他回答

如果你使用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());

就变成了,

const express = require('express');

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

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

app.use(bodyParser()); //Now deprecated

现在需要分别调用这些方法

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

等等。

如果你仍然得到一个urlencoded警告,你需要使用

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

扩展配置对象键现在需要显式传递,因为它现在没有默认值。

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

在我的情况下,它是typescript + vs code错误地标记为已弃用:

但是如果你检查源代码:

/** @deprecated */
declare function bodyParser(
    options?: bodyParser.OptionsJson & bodyParser.OptionsText & bodyParser.OptionsUrlencoded,
): NextHandleFunction;

declare namespace bodyParser {

您可以看到,它应该是构造函数,而不是名称空间。 所以不是typescript就是vs code弄错了。 一切都很好,在这种情况下没有发生弃用(bodyParser as namespace=

bodyParser:使用单独的json/urlencoded中间件node_modules\express\lib\router\layer.js:95:5

表达已弃用的请求。host:使用req。主机名改为node_modules\body-parser\index.js:100:29

提供扩展选项node_modules\ Body-parser \index.js:105:29

不需要更新表达式或主体解析器

这些错误将被删除。遵循以下步骤:-

app.use (bodyParser。urlencoded({扩展:真}));//这将有助于编码。 app.use (bodyParser.json ());//这将支持json格式

它会运行。

编码快乐!

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

// Express v4.16.0 and higher
// --------------------------
const express = require('express');

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

// For Express version less than 4.16.0
// ------------------------------------
const bodyParser = require('body-parser');

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

解释:扩展选项的默认值已弃用,这意味着您需要显式地传递true或false值。

注意,对于Express 4.16.0及更高版本:重新添加了正文解析器,以提供开箱即用的请求正文解析支持。