express.json vs bodyParser.json


99

Estou escrevendo um aplicativo relativamente novo e queria saber qual devo usar:

express.json()

ou

bodyParser.json()

Posso presumir que eles fazem a mesma coisa.

Eu gostaria de usar apenas express.json()como já está integrado.


express@4.17.1 usa apenas o analisador de corpo “1.19.0” como uma dependência
Tagi

Respostas:


233

As versões anteriores do Express costumavam ter muitos middlewares incluídos. bodyParser foi um dos middlewares que surgiu. Quando o Express 4.0 foi lançado, eles decidiram remover o middleware empacotado do Express e torná-los pacotes separados. A sintaxe então mudou de app.use(express.json())paraapp.use(bodyParser.json()) após a instalação do módulo bodyParser.

bodyParser foi adicionado de volta ao Express na versão 4.16.0, porque as pessoas queriam empacotá-lo com o Express como antes. Isso significa que você não precisa bodyParser.json()mais usar se estiver com a versão mais recente. Você pode usar em seu express.json()lugar.

O histórico de lançamento para 4.16.0 está aqui para aqueles que estão interessados, e a solicitação de pull aqui .


1
Podemos fazer também app.use(express.urlencoded({ extended: true }));?
Robin Métral

1
Sim, também é mencionado no PR que você vinculou. Ótimo!
Robin Métral

1
Isso significa que eles fazem o mesmo trabalho?
GNETO DOMINIQUE

e se eu usar // Análise de dados app.use (express.json ()); app.use (express.urlencoded ({extended: false})); isso é bom? porque o tutorial no youtube me diz para usar os dois
rickvian

1
@rickvian - Você pode usar os dois se quiser. json é para JSON e urlencoded é para dados codificados por URL. Se você adicionar os dois, poderá analisar os dois tipos.
Mika Sundland

14

SIM! Corrigir

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
Embora este snippet de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade de sua postagem. Lembre-se de que você está respondendo à pergunta para leitores no futuro e essas pessoas podem não saber os motivos de sua sugestão de código.
Brett DeWoody

8

Sim, ambos são iguais.

se você entrar no arquivo node_module / express / lib / express.js

você pode ver nas dependências do módulo o módulo do analisador de corpo já foi importado

/**
 * Module dependencies.
 */

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

os objetos e métodos dentro do módulo bodyparser são acessíveis à medida que são exportados usando o objeto especial module.exports

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

isso é acessível a partir do objeto expresso apenas chamando

express.json()

0

Sim!! Devido à opinião generalizada das pessoas em integrar o analisador de corpo de volta ao expresso, a versão mais recente faz exatamente isso. Você deve estar certo ao supor que ambos executam as mesmas tarefas, ou seja, reconhecer o objeto de solicitação recebido como objetos JSON. Sinta-se à vontade para usar qualquer um.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.