express.json与bodyParser.json


99

我正在编写一个相对较新的应用程序,想知道应该使用哪个应用程序:

express.json()

要么

bodyParser.json()

我可以假设他们做同样的事情。

我只想使用express.json()它,因为它已经内置。


express@4.17.1仅使用正文解析器“ 1.19.0”作为依赖项
Tagi

Answers:


233

Express的早期版本曾经捆绑了许多中间件。bodyParser是随之而来的中间件之一。当Express 4.0发布时,他们决定从Express中删除捆绑的中间件,而是将它们单独包装。然后app.use(express.json())app.use(bodyParser.json())在安装bodyParser模块之后,语法从更改为。

bodyParser在4.16.0版中又添加回Express中,因为人们希望它像以前一样与Express捆绑在一起。这意味着bodyParser.json()如果您使用的是最新版本,则无需再使用。您可以express.json()改用。

感兴趣的人可以在此处找到4.16.0的发布历史记录,有关发布请求,请参见此处


1
那我们还能做app.use(express.urlencoded({ extended: true }));吗?
罗宾·麦特拉(RobinMétral)

1
是的,您链接的PR中也提到了它。大!
罗宾·麦特拉(RobinMétral)

1
这是否意味着他们做同样的工作?
GNETO DOMINIQUE

如果我同时使用// //数据解析app.use(express.json())会怎样?app.use(express.urlencoded({extended:false})); 好吗?因为YouTube上的教程告诉我同时使用这两种方法
rickvian

1
@rickvian-您可以同时使用两者。json用于JSON,而urlencoded用于URL编码数据。如果同时添加这两种类型,则可以解析这两种类型。
Mika Sundland

14

是!正确

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;

31
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
Brett DeWoody

8

是的,两者都是一样的。

如果进入文件node_module / express / lib / express.js

您可以在模块依赖项下看到主体解析器模块已导入

/**
 * Module dependencies.
 */

var bodyParser = require('body-parser')
//other modules

使用特殊对象模块将它们导出时,可以访问bodyparser模块内部的对象和方法。

exports = module.exports = createApplication;
exports.json = bodyParser.json

这可以通过调用从express对象访问

express.json()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.