bodyParser已弃用express 4

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

body-parser deprecated bodyParser:使用单独的json/urlencoded中间件server.js:15:12 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);
453758 次浏览

这意味着从2014-06-19开始,使用bodyParser() 构造函数已经变成了弃用

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

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

app.use(bodyParser.urlencoded());


app.use(bodyParser.json());

等等。

如果使用urlencoded仍然得到警告,则需要使用urlencoded

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

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

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

想要# EYZ0吗?像这样使用它:

// 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
}));

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

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

在旧版本的express中,我们必须使用:

app.use(express.bodyparser());

,因为体解析器是节点和 表达。现在我们必须像这样使用它:

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

我是在加法的时候发现的

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

有帮助,有时取决于您的查询决定express如何处理它。

例如,您的参数可能在URL中传递,而不是在正文中传递

在这种情况下,您需要捕获身体url参数,并使用任何可用的参数(在下面的情况中优先使用主体参数)

app.route('/echo')
.all((req,res)=>{
let pars = (Object.keys(req.body).length > 0)?req.body:req.query;
res.send(pars);
});

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时,将拒绝放气体。

你对使用express-generator生成框架项目有什么看法,without deprecated messages出现在你的日志中

执行此命令

npm install express-generator -g

现在,通过在your Node projects folder中输入这个命令来创建新的Express.js starter应用程序。

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

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

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

# EYZ0 # EYZ1

用这个,

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:使用单独的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

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

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

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

它会运行。

编码快乐!

就连我也面临着同样的问题。下面我提到的更改解决了我的问题。

如果您使用的是表达4.16 +版本,那么

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

app.use(bodyparser.json()); //utilizes the body-parser package

  • You can now replace the above line with:

app.use(express.json()); //Used to parse JSON bodies

这应该不会在应用程序中引入任何破坏性的更改,因为Express.json()基于bodyparser.json()。中的代码

  • 如果你的环境中也有以下代码:

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

  • You can replace the above line with:

app.use(express.urlencoded()); //Parse URL-encoded bodies

  • 如果你得到一个警告,说你仍然需要传递extendedexpress.urlencoded(),然后更新上面的代码:

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

A final note of caution:

You might not need to install the additional body-parser package to your application if you are using Express 4.16+. There are many tutorials that include the installation of body-parser because they are dated prior to the release of Express 4.16.

bodyParser.json()代替bodyParser.json(), 您不希望安装body-parser

举个例子,

const express = require("express");


const app = express();
app.use(express.json());

不要使用体解析器

如果你正在使用Express 4.16+,你可以像这样使用表达:

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

现在可以使用npm uninstall body-parser卸载体解析器

< br > < br >

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

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


var postData = req.body;


//Or if this doesn't work


var postData = JSON.parse(req.body);
});

我希望这对你们有帮助

检查这个答案 # EYZ0 < / p >

// Use JSON parser for all non-webhook routes
app.use((req, res, next) => {
if (req.originalUrl === '/webhook') {
next();
} else {
express.json()(req, res, next);
}
});


// Stripe requires the raw body to construct the event
app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => {
const sig = req.headers['stripe-signature'];


let event;


try {
event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);
} catch (err) {
// On error, log and return the error message
console.log(`❌ Error message: ${err.message}`);
return res.status(400).send(`Webhook Error: ${err.message}`);
}


// Successfully constructed event
console.log('✅ Success:', event.id);


// Return a response to acknowledge receipt of the event
res.json({received: true});
});
在我的情况下,它是typescript + vs code错误地标记为已弃用: # EYZ0 < / p >

但是如果你检查源代码:

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


declare namespace bodyParser {

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