我正在使用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);
就连我也面临着同样的问题。下面我提到的更改解决了我的问题。
如果您使用的是Express 4.16+版本,那么
您可能在代码中添加了如下所示的一行:
app.use (bodyparser.json ());//使用body-parser包
现在你可以用以下语句替换上面的代码行:
app.use (express.json ());//用于解析JSON主体
因为express.json()中的代码是基于bodyparser.json()的,所以这不会在应用程序中引入任何破坏性的更改。
如果你的环境中也有以下代码:
app.use (bodyParser。urlencoded({扩展:真}));
你可以将上面的代码行替换为:
app.use (express.urlencoded ());//解析url编码的主体
如果你得到一个警告,说你仍然需要将extended传递给express.urlencoded(),那么,将上面的代码更新为:
app.use(表达。Urlencoded ({extended: true}));
最后提醒一句:
如果您使用的是Express 4.16+,则可能不需要在应用程序中安装附加的主体解析器包。有许多教程包含了体解析器的安装,因为它们的年代早于Express 4.16的发布。
如果你使用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());
不要使用体解析器
如果你使用的是Express 4.16+,你可以用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);
});
我希望这对你们有帮助
就连我也面临着同样的问题。下面我提到的更改解决了我的问题。
如果您使用的是Express 4.16+版本,那么
您可能在代码中添加了如下所示的一行:
app.use (bodyparser.json ());//使用body-parser包
现在你可以用以下语句替换上面的代码行:
app.use (express.json ());//用于解析JSON主体
因为express.json()中的代码是基于bodyparser.json()的,所以这不会在应用程序中引入任何破坏性的更改。
如果你的环境中也有以下代码:
app.use (bodyParser。urlencoded({扩展:真}));
你可以将上面的代码行替换为:
app.use (express.urlencoded ());//解析url编码的主体
如果你得到一个警告,说你仍然需要将extended传递给express.urlencoded(),那么,将上面的代码更新为:
app.use(表达。Urlencoded ({extended: true}));
最后提醒一句:
如果您使用的是Express 4.16+,则可能不需要在应用程序中安装附加的主体解析器包。有许多教程包含了体解析器的安装,因为它们的年代早于Express 4.16的发布。
你对使用express-generator的意见是什么,它将生成框架项目开始,没有弃用的消息出现在你的日志中
执行此命令
npm install express-generator -g
现在,在Node项目文件夹中输入这个命令创建新的Express.js starter应用程序。
express node-express-app
该命令告诉express生成名为node-express-app的新Node.js应用程序。
然后进入新创建的项目目录,安装npm包并使用命令启动应用程序
cd node-express-app && npm install && npm start