web-dev-qa-db-fra.com

bodyParser est obsolète express 4

J'utilise Express 4.0 et je suis conscient du fait que l'analyseur syntaxique a été retiré du noyau Express. J'utilise le remplacement recommandé, mais je reçois

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

Où puis-je trouver ce supposé middleware? ou devrais-je pas obtenir cette erreur?

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

Cela signifie que l'utilisation du constructeur bodyParser() a été obsolète au 2014-06-19.

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

Vous devez maintenant appeler les méthodes séparément

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

Etc.

Si vous recevez toujours un avertissement avec urlencoded, vous devez utiliser

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

La clé d'objet de configuration extended doit maintenant être explicitement transmise, car elle n'a plus de valeur par défaut.

Si vous utilisez Express> = 4.16.0, l'analyseur de corps a été ajouté de nouveau sous les méthodes express.json() et express.urlencoded().

650
Ben Fortune

Vous voulez zéro avertissement? Utilisez-le comme ceci:

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

Explication: La valeur par défaut de l'option extended est obsolète, ce qui signifie que vous devez explicitement passer la valeur true ou false.

148
smajl

Dans les anciennes versions d’express, nous devions utiliser:

app.use(express.bodyparser()); 

car body-parser était un middleware entre node et express. Maintenant, nous devons l'utiliser comme:

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

body-parser est un middleware express qui lit les entrées d'un formulaire et les stocke sous la forme d'un objet javascript accessible via req.body 'body-parser' doit être installé (via npm install --save body-parser). Pour plus d'informations, consultez: 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

Lorsque extended est défini sur true, les corps déflatés (compressés) sont gonflés. Lorsque extended est défini sur false, les corps déflatés sont rejetés.

5
Parth Raval

Quelle est votre opinion si vous utilisez Express-Generator, cela générera un projet squelette pour commencer, without deprecated messages est apparu dans votre journal

lancer cette commande

npm install express-generator -g

A présent, créez une nouvelle application de démarrage Express.js en tapant cette commande dans your Node projects folder.

express node-express-app

Cette commande indique à Express de générer une nouvelle application Node.js avec le nom node-express-app.

puis Go to the newly created project directory, install npm packages et start the app à l'aide de la commande

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

J'ai trouvé que tout en ajoutant

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

aide, parfois c'est une question de votre requête qui détermine comment express le gère.

Par exemple, il se peut que vos paramètres soient passés dans le URL plutôt que dans le corps

Dans ce cas, vous devez capturer les paramètres body et rl et utiliser celui qui est disponible (avec une préférence pour les paramètres de corps dans le cas ci-dessous).

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