bodyParser è deprecato express 4


398

Sto usando Express 4.0 e sono consapevole che il parser per il corpo è stato rimosso dal core Express, sto usando la sostituzione consigliata, tuttavia sto ottenendo

body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12 body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29

Dove trovo questi presunti middleware? o non dovrei ricevere questo errore?

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

Risposte:


730

Significa che l'utilizzo del bodyParser() costruttore è stato deprecato , a partire dal 19/06/2014.

app.use(bodyParser()); //Now deprecated

Ora devi chiamare i metodi separatamente

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

E così via.

Se stai ancora ricevendo un avviso con urlencodedè necessario utilizzare

app.use(bodyParser.urlencoded({
  extended: true
}));

La extendedchiave dell'oggetto config ora deve essere passata esplicitamente, poiché ora non ha alcun valore predefinito.

Se si utilizza Express> = 4.16.0, il parser del corpo è stato aggiunto nuovamente con i metodi express.json()e express.urlencoded().


1
@eslammostafa Puoi usare bodyparser, non puoi semplicemente chiamare il costruttore. Devi chiamare ogni singolo metodo.
Ben Fortune,

2
@BenFortune grazie Ben, ho capito, ero solo preoccupato per la cosa / tmp, ma ora ho verificato di nuovo, il problema / tmp si verifica solo se abbiamo usato bodyParser per analizzare i moduli multipart, andrewkelley.me/post/do-not-use -bodyparser-with-express-js.html userò formidabile quindi per i moduli multipart.
schehata,

23
Che cosa significa extendedfare?
Camilo Martin,

1
una spiegazione della differenza sarebbe utile. Di seguito vedo anche che puoi semplicemente usare entrambi. Ma perché? Quali considerazioni dovresti fare?
Harry Moreno,

8
Il modo migliore che spiegare esteso vero è che non con mezzi estesi che curl --data "user[email]=foo&user[password]=bar" localhost:3000/login potrebbero essere ricevuti dal server in req.bodyquanto { user[email]: "foo", ...}, mentre req.bodysarebbe {user: {email: "foo", ... }}con extended: true.
reed_de_la_mer,

156

Vuoi zero avvisi ? Usalo in questo modo:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

Spiegazione : Il valore predefinito extendeddell'opzione è stato deprecato, il che significa che è necessario passare esplicitamente il valore vero o falso.


1
Lo uso, ricevendo ancora il messaggio "deprecato body-parser". app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));
Jeremy Thille,

6
Non è così che funzionerà. Devi usare app.use () separatamente per json e urlencoded
mr-karan,

14

Nelle versioni precedenti di express, dovevamo usare:

app.use(express.bodyparser()); 

perché body-parser era un middleware tra node ed express. Ora dobbiamo usarlo come:

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

Penso che avresti voluto dire "body-parser was middleware"? express non è un middleware a quanto ho capito
sakhunzai,

9

Se stai usando express> 4.16, puoi usare express.json()eexpress.urlencoded()

Il express.json()e il express.urlencoded()middleware sono stati aggiunti per fornire immediatamente supporto di analisi del corpo della richiesta. Questo utilizza il expressjs/body-parsermodulo modulo sottostante, quindi le app che attualmente richiedono il modulo separatamente possono passare ai parser integrati.

Source Express 4.16.0 - Data di rilascio: 2017-09-28

Con questo,

const bodyParser  = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

diventa,

const express = require('express');

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

8

body-parser è un middleware express che legge l'input di un modulo e lo memorizza come oggetto javascript accessibile tramite req.body 'body-parser' deve essere installato (tramite npm install --save body-parser) Per maggiori informazioni consultare: https://github.com/expressjs/body -parser

   var bodyParser = require('body-parser');
   app.use(bodyParser.json()); // support json encoded bodies
   app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

Quando extendedè impostato su true, i corpi sgonfiati (compressi) verranno gonfiati; quando extendedè impostato su false, i corpi sgonfiati vengono rifiutati.


2

Qual è la tua opinione da usare express-generator che genererà il progetto scheletro per cominciare, è without deprecated messagesapparso nel tuo registro

eseguire questo comando

npm install express-generator -g

Ora, crea una nuova applicazione di avvio Express.js digitando questo comando in your Node projects folder.

express node-express-app

Questo comando dice a express di generare una nuova applicazione Node.js con il nome node-express-app.

quindi Go to the newly created project directory, install npm packagese start the appusando il comando

cd node-express-app && npm install && npm start

1

Ho scoperto che durante l'aggiunta

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

aiuta, a volte è una questione di query che determina come express lo gestisce.

Ad esempio, è possibile che i parametri vengano passati nell'URL anziché nel corpo

In tal caso, è necessario acquisire sia i parametri body che url e utilizzare quello che è disponibile (con preferenza per i parametri body nel caso seguente)

app.route('/echo')
    .all((req,res)=>{
        let pars = (Object.keys(req.body).length > 0)?req.body:req.query;
        res.send(pars);
    });

-1

app.use(bodyParser.urlencoded({extended: true}));

Ho lo stesso problema ma questo lavoro per me. Puoi provare questa parte estesa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.