এক্সপ্রেস অ্যাপ্লিকেশনটিতে কীভাবে আমি JSON পোস্টের ডেটা গ্রাহ্য করব


307

আমি আমার সার্ভারে নিম্নলিখিত JSON স্ট্রিং প্রেরণ করছি।

(
        {
        id = 1;
        name = foo;
    },
        {
        id = 2;
        name = bar;
    }
)

সার্ভারে আমার এটি আছে।

app.post('/', function(request, response) {

    console.log("Got response: " + response.statusCode);

    response.on('data', function(chunk) {
        queryResponse+=chunk;
        console.log('data');
    });

    response.on('end', function(){
        console.log('end');
    });
});

আমি যখন স্ট্রিংটি প্রেরণ করি তখন এটি দেখায় যে আমি 200 টি প্রতিক্রিয়া পেয়েছি তবে অন্য দুটি পদ্ধতি কখনও চালায় না। তা কেন?

উত্তর:


479

আমি মনে করি আপনি এর ব্যবহারের responseসাথে বস্তুর ব্যবহারকে বিভ্রান্ত করছেন request

responseযেহেতু তোমাদের শরীর অ্যাক্সেস করতে অনুপস্থিত আছে বস্তু, কলিং ক্লায়েন্ট HTTP প্রতিক্রিয়া ফেরত পাঠানোর জন্য request। এই উত্তরটি দেখুন যা কিছু দিকনির্দেশনা সরবরাহ করে।

আপনি যদি বৈধ JSON ব্যবহার করছেন এবং এটি পোস্ট করছেন Content-Type: application/json, তবে আপনি bodyParserমিডলওয়্যারটি অনুরোধের বডিটি পার্স করতে এবং ফলাফলটি request.bodyআপনার রুটের স্থানে রাখতে পারেন ।

var express = require('express')
  , app = express.createServer();

app.use(express.bodyParser());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
  response.send(request.body);    // echo the result back
});

app.listen(3000);

লাইন বরাবর পরীক্ষা:

$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}

এক্সপ্রেস 4+ এর জন্য আপডেট হয়েছে

বডি পার্সারটি v4 এর পরে নিজস্ব এনপিএম প্যাকেজে বিভক্ত হয়েছিল, একটি পৃথক ইনস্টল প্রয়োজন npm install body-parser

var express = require('express')
  , bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
   response.send(request.body);    // echo the result back
});

app.listen(3000);

এক্সপ্রেস 4.16+ এর জন্য আপডেট

4.16.0 প্রকাশের সাথে শুরু করে একটি নতুন express.json()মিডলওয়্যার উপলব্ধ।

var express = require('express');

var app = express();

app.use(express.json());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
   response.send(request.body);    // echo the result back
});

app.listen(3000);

21
request.body.MyKey
পেরো পি।

5
কারণ কনকনেটেশনটি বস্তুর toString()দিকে আহ্বান জানায় । নোড ডক্সের জন্য একবার দেখুন console.log, কারণ এটি বস্তুটি পরীক্ষা করে এবং একটি স্ট্রিং প্রতিনিধিত্ব দেয়।
পেরো পি।

13
console.log('request =' + JSON.stringify(request.body))
পেরো পি।

3
বর্তমান console.log()স্বয়ংক্রিয়ভাবে একটি বস্তু stringify পাবেন (মাধ্যমে util.inspect():) আজকের কাজ করবেconsole.log("with request", request.body);
টমি স্টানটন

4
এই উত্তরটি পুরানো, তবে @ ক্রিসারটন থেকে দেওয়া উত্তরটি আপ টু ডেট।
এমিল ইঙ্গারস্লেভ

209

এক্সপ্রেস ভি 4 + এর জন্য

এনপিএম থেকে বডি পার্সার ইনস্টল করুন।

$ npm install body-parser

https://www.npmjs.org/package/body-parser#installation

var express    = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res, next) {
  console.log(req.body) // populated!
  next()
})

23
কেন তারা সবাই যে জিনিস ব্যবহার করে তা বের করে রাখে?
হালকা 24 বুবলস

11
@ লাইট ২৪ বুলবস তাই এটি (এক্সপ্রেস) আরও চর্বিযুক্ত হবে এবং যারা তাদের ব্যবহার করে না / তাদের প্রয়োজন হবে তাদের পক্ষে এটি বোঝা যাবে।
andyengle

6
@ Andyengle- এর অর্থ নেই। তবে আমি মনে করি কার্যত প্রত্যেকে অনুরোধ পার্সিং ব্যবহার করে। এটি আমার কাছে একটি মূল বৈশিষ্ট্য বলে মনে হচ্ছে।
হালকা 24 জুলাই

23
মিডলওয়্যার ফাংশন ইন্টারফেসটি অনেক লাইব্রেরি দ্বারা ব্যবহৃত একটি স্ট্যান্ডার্ড, এটি এই অ্যাপ্লিকেশনগুলিকে এই মিডলওয়্যার ফাংশনগুলি ব্যবহার করতে এক্সপ্রেস ব্যবহার করে না allows
আনম

3
এটিকে প্রকাশের বাইরে নিয়ে যাওয়া অ্যাপ্লিকেশনগুলির দ্বারা এটি ব্যবহারের অনুমতি দেয় না যা অনুরোধগুলি ব্যবহার করে না। তারা এটিকে পৃথক করে রাখতে পারত এবং এটিকে ডিফল্টরূপে প্রকাশ করতে পারে।
জেজে

18

কখনও কখনও পাঠ্য থেকে জেএসএন পার্স করার জন্য আপনার তৃতীয় পক্ষের গ্রন্থাগারগুলির প্রয়োজন হবে না। কখনও কখনও আপনার সমস্ত নীচের জেএস কমান্ডের প্রয়োজন হয়, প্রথমে এটি চেষ্টা করুন:

        const res_data = JSON.parse(body);

3
মূল প্রশ্নটি এক্সপ্রেস ফ্রেমওয়ার্কের একটি পোস্ট বার্তা থেকে জেএসনকে পার্স করার বিষয়ে। বডি পার্সার মিডলওয়্যার ছাড়া, অনুরোধের বস্তুর বডি প্রোপার্টিতে জেএসএন ডেটা উপস্থিত থাকবে না।
ক্লার্ক

1
সার্ভারের প্রতিক্রিয়া পার্স করার সময় আমি এই দরকারী পেয়েছি। ধন্যবাদ!
হাসান আলসাওয়াদি

1
ধন্যবাদ হাসান, আমি আপনার মন্তব্যের প্রশংসা করি। আমি যখন সলিউশন খুঁজছিলাম এবং এই পোস্টটি জুড়ে এসেছিলাম তখন এটি আমাকে সহায়তা করেছিল। নিশ্চিত না যে এটি সব ক্ষেত্রেই কাজ করে তবে এটি কিছুটিতে অবশ্যই কাজ করে এবং এটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করার চেয়ে ভাল সমাধান।
এক্সিমস

1
আপনার উত্তর এবং একটি মন্তব্য আরও তথ্যের সাথে উত্তর সরবরাহ করে (আরও উত্তর এখানে আপনার উত্তর হচ্ছে)। এক্সপ্রেসটির বডি পার্সার দরকার কিনা তা বোঝাতে আপনার উত্তর আপডেট করা উচিত বা বডি পার্সার কীভাবে ডেটা প্রথম স্থানে পেয়েছে তা নির্দেশ করার জন্য একটি বিকল্প দেওয়া উচিত।
ডিওয়ালওয়াল্ড

2
সংজ্ঞায়িত করা হয় নাbody
জামেসফিশার

15

যাঁরা খালি কোনও জিনিস পেয়ে যাচ্ছেন req.body

আমি headers: {"Content-Type": "application/json"} অনুরোধ সেট করতে ভুলে গিয়েছিলাম । এটি পরিবর্তন করা সমস্যার সমাধান করে।


বিশ্বাস করতে পারি না আমি এটাকে মিস করেছি! আমি পাঠিয়েছিলাম text/jsonএবং {}প্রতিক্রিয়া হিসাবে পেয়েছিলাম । আমার পক্ষ থেকে মোট তদারকি। খুব উপকারী.
জেমস এম। লে।

উঘ - আমিও এটি মিস করেছি missed এই পোস্ট করার জন্য আপনাকে ধন্যবাদ তাই আমি ইতিমধ্যে আমার চেয়ে বেশি সময় অপচয় করি না!
স্টিভ গোমেজ

9

@ ড্যানিয়েল থম্পসন উল্লেখ করেছেন যে তিনি} "কন্টেন্ট-টাইপ": "অ্যাপ্লিকেশন / জেসন"} যুক্ত করতে ভুলে গিয়েছিলেন অনুরোধ । তিনি অনুরোধটি পরিবর্তন করতে সক্ষম হয়েছিলেন, তবে, অনুরোধগুলি পরিবর্তন করা সর্বদা সম্ভব নয় (আমরা এখানে সার্ভারে কাজ করছি)।

আমার ক্ষেত্রে আমার কন্টেন্ট-টাইপ: পাঠ্য / প্লেইনকে জসন হিসাবে পার্স করার জন্য জোর করা দরকার।

আপনি যদি অনুরোধের সামগ্রী-ধরণের পরিবর্তন করতে না পারেন তবে নিম্নলিখিত কোডটি ব্যবহার করে দেখুন:

app.use(express.json({type: '*/*'}));

এক্সপ্রেস.জসন () কে বিশ্বব্যাপী ব্যবহার না করে আমি কেবল প্রয়োজন যেখানে এটি প্রয়োগ করতে পছন্দ করি, উদাহরণস্বরূপ একটি পোষ্ট অনুরোধে:

app.post('/mypost', express.json({type: '*/*'}), (req, res) => {
  // echo json
  res.json(req.body);
});

7

const express = require('express');
let app = express();
app.use(express.json());

এই অ্যাপ্লিকেশনটি (এক্সপ্রেস.জসন) এখন আপনাকে আসন্ন পোস্ট জেএসএন অবজেক্ট পড়তে দেবে

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