【问题标题】:express.json vs bodyParser.jsonexpress.json 与 bodyParser.json
【发布时间】:2018-04-24 05:42:42
【问题描述】:

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

express.json()

bodyParser.json()

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

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

【问题讨论】:

  • express@4.17.1 只是使用 body-parser “1.19.0” 作为依赖

标签: json express


【解决方案1】:

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()

4.16.0 的发布历史是 here 供感兴趣的人使用,拉取请求是 here

【讨论】:

  • 那我们也可以app.use(express.urlencoded({ extended: true }));吗?
  • 啊,是的,在您链接的 PR 中也提到了。太好了!
  • 这是否意味着他们做同样的工作?
  • 如果我同时使用两者会怎样 // 数据解析 app.use(express.json()); app.use(express.urlencoded({extended: false }));好吗?因为 youtube 中的教程告诉我两者都使用
  • @rickvian - 如果你愿意,你可以同时使用。 json 用于 JSON,urlencoded 用于 URL 编码数据。如果您同时添加两者,您将能够解析这两种类型。
【解决方案2】:

是的!正确的

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;

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案3】:

是的,两者都是一样的。

如果你进入文件 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()

【讨论】:

    【解决方案4】:

    是的!你可以同时使用它们。但是,由于express.json() 现在已经内置在express 中,因此使用express.json() 比使用bodyParser.json() 更明智。

    【讨论】:

      【解决方案5】:

      是的!由于人们普遍认为将 body-parser 与 express 集成回来,最新版本正是这样做的。您应该正确地假设两者都执行相同的任务,即将传入的请求对象识别为 JSON 对象。随意使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-04
        • 2017-02-13
        • 2023-01-30
        • 1970-01-01
        • 2021-09-24
        • 2020-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多