【发布时间】:2018-04-24 05:42:42
【问题描述】:
我正在编写一个相对较新的应用程序,并且想知道应该使用哪个:
express.json()
或
bodyParser.json()
我可以假设他们做同样的事情吗?
我只想使用 express.json(),因为它已经内置了。
【问题讨论】:
-
express@4.17.1 只是使用 body-parser “1.19.0” 作为依赖
我正在编写一个相对较新的应用程序,并且想知道应该使用哪个:
express.json()
或
bodyParser.json()
我可以假设他们做同样的事情吗?
我只想使用 express.json(),因为它已经内置了。
【问题讨论】:
Express 的早期版本曾经捆绑了很多中间件。 bodyParser 是它附带的中间件之一。当 Express 4.0 发布时,他们决定从 Express 中删除捆绑的中间件,并将它们分开。安装 bodyParser 模块后,语法从 app.use(express.json()) 更改为 app.use(bodyParser.json())。
bodyParser 在 4.16.0 版本中被重新添加到 Express 中,因为人们希望它像以前一样与 Express 捆绑在一起。这意味着如果您使用的是最新版本,则不必再使用bodyParser.json()。您可以改用express.json()。
【讨论】:
app.use(express.urlencoded({ extended: true }));吗?
是的!正确的
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
【讨论】:
是的,两者都是一样的。
如果你进入文件 node_module/express/lib/express.js
你可以在模块依赖下看到body parser模块已经被导入
/**
* Module dependencies.
*/
var bodyParser = require('body-parser')
//other modules
bodyparser 模块中的对象和方法是可访问的,因为它们是使用特殊对象 module.exports 导出的
exports = module.exports = createApplication;
exports.json = bodyParser.json
这可以通过调用从 express 对象访问
express.json()
【讨论】:
是的!你可以同时使用它们。但是,由于express.json() 现在已经内置在express 中,因此使用express.json() 比使用bodyParser.json() 更明智。
【讨论】:
是的!由于人们普遍认为将 body-parser 与 express 集成回来,最新版本正是这样做的。您应该正确地假设两者都执行相同的任务,即将传入的请求对象识别为 JSON 对象。随意使用。
【讨论】: