বডি পার্সার 4 এক্সপ্রেস করা হয়


398

আমি এক্সপ্রেস ৪.০ ব্যবহার করছি এবং আমি সচেতন যে বডি পার্সারটি এক্সপ্রেস কোর থেকে বাইরে নিয়ে গেছে, আমি প্রস্তাবিত প্রতিস্থাপনটি ব্যবহার করছি, তবে আমি পাচ্ছি

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-06-19 হিসাবে।

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

আপনার এখন পদ্ধতিগুলি আলাদাভাবে কল করতে হবে

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

ইত্যাদি।

যদি আপনি এখনও সতর্কতা পেয়ে থাকেন তবে urlencodedআপনার ব্যবহার করা দরকার

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

extendedকনফিগ বস্তুর কী এখন স্পষ্টভাবে পাস করতে হবে, যেহেতু এটি এখন কোনো ডিফল্ট মান আছে প্রয়োজন।

আপনি এক্সপ্রেস ব্যবহার করে থাকেন> = 4.16.0, শরীর পার্সার পদ্ধতি অধীনে পুনরায় যোগ করা হয়েছে express.json()এবং express.urlencoded()


1
@ ইসলামোস্তফা আপনি বডিপার্সার ব্যবহার করতে পারেন, আপনি কেবল কনস্ট্রাক্টরকে কল করতে পারবেন না। আপনাকে প্রতিটি স্বতন্ত্র পদ্ধতিতে কল করতে হবে।
বেন ফরচুন

2
@ বেনফোর্টুন ধন্যবাদ বেন, আমি এটি পেয়েছি, আমি কেবল / টিএমপি জিনিসটি নিয়ে চিন্তিত ছিলাম, তবে এখন আমি আবার পরীক্ষা করে দেখলাম, / টিএমপি সমস্যা কেবল তখনই ঘটবে যদি আমরা মাল্টিপার্ট ফর্মগুলি পার্স করার জন্য বডি পার্সার ব্যবহার করি, andrewkelley.me/post/do-not- ব্যবহার এক্সপ্রেস- js.html- সহ-বডিপারসার আমি তখন বহুগুণ ফর্মগুলির জন্য শক্তিশালী ব্যবহার করব।
স্কিচটা

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 জন্য app.use (ব্যবহার এবং urlencoded প্রয়োজন
জনাব-করণ

14

এক্সপ্রেসের পুরানো সংস্করণগুলিতে, আমাদের ব্যবহার করতে হয়েছিল:

app.use(express.bodyparser()); 

কারণ দেহ-পার্সারটি নোড এবং এক্সপ্রেসের মধ্যে একটি মাঝারি পাত্র ছিল। এখন আমাদের এটির মতো ব্যবহার করতে হবে:

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

আমার মনে হয় আপনি "বডি পার্সার মিডলওয়্যার" বলতে চেয়েছিলেন? এক্সপ্রেস মিডলওয়্যার নয় যেমন আমি বুঝতে পেরেছি
sakhunzai

8

বডি পার্সার হ'ল এক্সপ্রেস মিডলওয়্যারের একটি অংশ যা কোনও ফর্মের ইনপুটটি পড়ে এবং এটি req.body 'বডি পার্সার' এর মাধ্যমে অ্যাক্সেসযোগ্য জাভাস্ক্রিপ্ট হিসাবে সংরক্ষণ করতে হবে (এর মাধ্যমে 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

এখন, নতুন এক্সপ্রেস.জেএস স্টার্টার অ্যাপ্লিকেশনটি এই কমান্ডটি টাইপ করে তৈরি করুন your Node projects folder

express node-express-app

এই কমান্ডটি এক্সপ্রেসকে বলুন নামের সাথে নতুন নোড.জেএস অ্যাপ্লিকেশন তৈরি করতে 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 এ পাস করা হয়েছে passed

এই জাতীয় ক্ষেত্রে, আপনাকে দেহ এবং 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}));

আমার একই সমস্যা তবে এটি আমার জন্য কাজ। আপনি এই বর্ধিত অংশটি চেষ্টা করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.