bodyParser पदावनत एक्सप्रेस 4 है


398

मैं एक्सप्रेस 4.0 का उपयोग कर रहा हूं और मुझे पता है कि बॉडी पार्सर को एक्सप्रेस कोर से बाहर निकाल दिया गया है, मैं अनुशंसित प्रतिस्थापन का उपयोग कर रहा हूं, हालांकि मुझे मिल रहा है

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

मैं इस कथित बिचौलियों को कहाँ ढूँढता हूँ? या मुझे यह त्रुटि नहीं मिल रही है?

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

जवाबों:


730

इसका अर्थ है कि bodyParser() निर्माणकर्ता का उपयोग 2014-15-19 के अनुसार किया गया है ।

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

अब आपको विधियों को अलग से कॉल करने की आवश्यकता है

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

और इसी तरह।

यदि आपको अभी भी चेतावनी मिल रही है urlencodedतो आपको उपयोग करने की आवश्यकता है

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

extendedConfig वस्तु कुंजी अब स्पष्ट रूप से पारित होने के लिए है, क्योंकि यह अब कोई डिफ़ॉल्ट मान है की जरूरत है।

आप एक्सप्रेस का उपयोग कर रहे हैं, तो> = 4.16.0, शरीर पार्सर तरीकों के तहत फिर से जोड़ दिया गया है express.json()और express.urlencoded()


1
@eslammostafa आप बॉडीप्रेसर का उपयोग कर सकते हैं, आप बस कंस्ट्रक्टर को कॉल नहीं कर सकते। आपको प्रत्येक व्यक्तिगत विधि को कॉल करने की आवश्यकता है।
बेन फॉर्च्यून

2
@BenFortune धन्यवाद बेन, मुझे मिल गया, मैं सिर्फ / tmp बात चिंतित था, लेकिन अब मैं फिर से जाँच की, / tmp समस्या तभी होती है जब हम मल्टीपार्ट रूपों, andrewkelley.me.post/do-not-use- पार्स करने के लिए bodyParser का उपयोग करते हैं -bodyparser-with-express-js.html मैं दुर्जेय का उपयोग तब मल्टीपार्ट रूपों के लिए करेगा।
अक्टूबर को schehata

23
क्या करता extendedहै?
कैमिलो मार्टिन

1
अंतर की व्याख्या सहायक होगी। मैं नीचे यह भी देखता हूं कि आप दोनों का उपयोग कर सकते हैं। लेकिन क्यों? आपको क्या विचार करना चाहिए?
हैरी मोरेनो

8
सबसे अच्छा तरीका है मैं सच बढ़ाया समझाने की है कि विस्तारित अर्थ यह है कि का उपयोग नहीं है curl --data "user[email]=foo&user[password]=bar" localhost:3000/login में सर्वर को प्राप्त किया जाएगा req.bodyके रूप में { user[email]: "foo", ...}जबकि req.bodyहोगा {user: {email: "foo", ... }}साथ extended: true
reed_de_la_mer

156

चाहते हैं शून्य चेतावनी ? इसे इस तरह उपयोग करें:

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

स्पष्टीकरण : extendedविकल्प का डिफ़ॉल्ट मान हटा दिया गया है, जिसका अर्थ है कि आपको स्पष्ट रूप से सही या गलत मान पास करने की आवश्यकता है।


1
मैं इसका उपयोग करता हूं, फिर भी "बॉडी-पार्सर डीग्रेडेड" संदेश मिल रहा है। app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));
जेरेमी थिएल

6
ऐसा नहीं है कि यह कैसे काम करेगा। आपको json और urlencoded के लिए अलग से app.use () का उपयोग करने की आवश्यकता है
mr-karan

14

एक्सप्रेस के पुराने संस्करणों में, हमें उपयोग करना था:

app.use(express.bodyparser()); 

क्योंकि बॉडी-पार्सर नोड और एक्सप्रेस के बीच एक मिडलवेयर था। अब हमें इसका उपयोग करना है:

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

मुझे लगता है कि आप "बॉडी-पार्सर मिडलवेयर" कहना चाहते थे? एक्सप्रेस मिडलवेयर नहीं है जैसा कि मैं समझता हूँ
सखूनजई

8

body-parser एक एक्सप्रेस मिडिलवेयर का एक टुकड़ा है जो किसी प्रपत्र के इनपुट को पढ़ता है और इसे एक जावास्क्रिप्ट ऑब्जेक्ट के रूप में संग्रहीत करता है जो कि req.body 'body-parser' के माध्यम से सुलभ होना चाहिए (द्वारा npm install --save body-parser) अधिक जानकारी के लिए देखें: 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

जब extendedसही पर सेट किया जाता है, तो अपस्फीति (संपीड़ित) निकायों को फुलाया जाएगा; जब extendedअसत्य पर टाल दिया जाता है, तब अपवित्र निकायों को अस्वीकार कर दिया जाता है।


8

यदि आप एक्सप्रेस> का उपयोग कर रहे हैं 4.16, तो आप उपयोग कर सकते हैं express.json()औरexpress.urlencoded()

express.json()और express.urlencoded()बाहर के बॉक्स मिडलवेयर अनुरोध शरीर पार्स सहायता प्रदान करने के लिए जोड़ा गया है। यह expressjs/body-parserनीचे मॉड्यूल का उपयोग करता है, इसलिए वर्तमान में अलग से मॉड्यूल की आवश्यकता वाले एप्लिकेशन को अंतर्निहित पार्सर पर स्विच किया जा सकता है।

स्रोत एक्सप्रेस 4.16.0 - रिलीज़ की तारीख: 2017-09-28

इसके साथ,

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

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

हो जाता है,

const express = require('express');

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

2

एक्सप्रेस-जनरेटर का उपयोग करने के लिए आपकी क्या राय है, यह without deprecated messagesआपके लॉग में दिखाई देने के साथ कंकाल परियोजना शुरू करेगा

यह आदेश चलाएँ

npm install express-generator -g

अब, इस आदेश को टाइप करके नया Express.js स्टार्टर एप्लिकेशन बनाएं your Node projects folder

express node-express-app

वह आदेश नाम के साथ नया Node.js एप्लिकेशन जेनरेट करने के लिए एक्सप्रेस बताता है node-express-app

तब Go to the newly created project directory, install npm packagesऔर start the appकमांड का उपयोग कर

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

1

मैंने पाया कि जोड़ते समय

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

मदद करता है, कभी-कभी यह आपकी क्वेरी का मामला होता है जो निर्धारित करता है कि एक्सप्रेस इसे कैसे संभालती है।

उदाहरण के लिए, यह हो सकता है कि आपके पैरामीटर शरीर के बजाय URL में पारित किए गए हों

ऐसे मामले में, आपको शरीर और url दोनों मापदंडों को पकड़ने की जरूरत है और जो भी उपलब्ध हो (नीचे के मामले में शरीर के मापदंडों के लिए वरीयता के साथ) का उपयोग करें

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

मुझे भी यही समस्या है लेकिन मेरे लिए यह काम है। आप इस विस्तारित भाग को आज़मा सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.