formatter - json validator




নোড বা এক্সপ্রেস ব্যবহার করে JSON ফিরে সঠিক উপায় (5)

সুতরাং, নিম্নলিখিত JSON বস্তু আনতে চেষ্টা করতে পারেন:

$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=ISO-8859-1
Date: Wed, 30 Oct 2013 22:19:10 GMT
Server: Google Frontend
Cache-Control: private
Alternate-Protocol: 80:quic,80:quic
Transfer-Encoding: chunked

{
   "anotherKey": "anotherValue",
   "key": "value"
}
$

একটি নোড বা এক্সপ্রেস ব্যবহার করে একটি সার্ভার থেকে একটি প্রতিক্রিয়া ঠিক একই শরীর উত্পাদন করার একটি উপায় আছে? স্পষ্টতই, কেউ শিরোনাম সেট করতে পারে এবং ইঙ্গিত করে যে প্রতিক্রিয়া সামগ্রীটি "অ্যাপ্লিকেশন / জসন" হতে চলেছে, তবে তারপরে বস্তুটি লিখতে / পাঠানোর বিভিন্ন উপায় রয়েছে। আমি সাধারণত দেখা যায় যে এক ফর্ম একটি কমান্ড ব্যবহার করে হয়:

response.write(JSON.stringify(anObject));

যাইহোক, এই দুটি পয়েন্ট আছে যেখানে কেউ একটি "সমস্যা" হিসাবে যুক্তি দিতে পারে:

  • আমরা একটি স্ট্রিং পাঠানো হয়।
  • তাছাড়া, শেষ পর্যন্ত কোন নতুন লাইন অক্ষর নেই।

আরেকটি ধারণা কমান্ড ব্যবহার করা হয়:

response.send(anObject);

এটি উপরের প্রথম উদাহরণের অনুরূপ কার্লের আউটপুটের উপর ভিত্তি করে একটি JSON অবজেক্ট পাঠাচ্ছে বলে মনে হচ্ছে। যাইহোক, শরীরের শেষে কোন নতুন লাইন চরিত্র নেই যখন আবার কার্নেলটি টার্মিনালে ব্যবহার করা হয়। সুতরাং, কিভাবে আসলেই নোড বা নোড / এক্সপ্রেস ব্যবহার করে একটি নতুন লাইন চরিত্রের সাথে এইরকম কিছু লিখতে পারে?


Express.js 3x থেকে প্রতিক্রিয়া বস্তুর একটি জসন () পদ্ধতি রয়েছে যা আপনার জন্য সমস্ত শিরোলেখ সঠিকভাবে সেট করে এবং JSON বিন্যাসে প্রতিক্রিয়া প্রদান করে।

উদাহরণ:

res.json({"foo": "bar"});

আপনি ডিফল্ট সামগ্রী-প্রকারটি সেট করতে একটি মিডলওয়্যার ব্যবহার করতে পারেন এবং নির্দিষ্ট APIগুলির জন্য পৃথকভাবে সামগ্রী-প্রকার সেট করতে পারেন। এখানে একটি উদাহরণ:

const express = require('express');
const app = express();

const port = process.env.PORT || 3000;

const server = app.listen(port);

server.timeout = 1000 * 60 * 10; // 10 minutes

// Use middleware to set the default Content-Type
app.use(function (req, res, next) {
    res.header('Content-Type', 'application/json');
    next();
});

app.get('/api/endpoint1', (req, res) => {
    res.send(JSON.stringify({value: 1}));
})

app.get('/api/endpoint2', (req, res) => {
    // Set Content-Type differently for this particular API
    res.set({'Content-Type': 'application/xml'});
    res.send(`<note>
        <to>Tove</to>
        <from>Jani</from>
        <heading>Reminder</heading>
        <body>Don't forget me this weekend!</body>
        </note>`);
})

আপনি যদি এক্সপ্রেস ব্যবহার করেন তবে এটি ব্যবহার করতে পারেন:

res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({key:"value"}));

অথবা শুধু এই

res.json({key:"value"});

আপনি শুধু পাইপ এবং অনেক প্রসেসর এক এটি ব্যবহার করে prettify করতে পারেন। আপনার অ্যাপ্লিকেশন সবসময় সম্ভব ছোট লোড হিসাবে সঙ্গে প্রতিক্রিয়া করা উচিত।

$ curl -i -X GET http://echo.jsontest.com/key/value/anotherKey/anotherValue | underscore print

https://github.com/ddopson/underscore-cli


যে প্রতিক্রিয়া খুব একটি স্ট্রিং, আপনি প্রতিক্রিয়া প্রেরণ করতে চান, কিছু অদ্ভুত কারণে, আপনি JSON.stringify(anObject, null, 3) মত কিছু ব্যবহার করতে পারেন JSON.stringify(anObject, null, 3)

application/json এও আপনি Content-Type শিরোনাম সেট করুন এটি গুরুত্বপূর্ণ।

var http = require('http');

var app = http.createServer(function(req,res){
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify({ a: 1 }));
});
app.listen(3000);

// > {"a":1}

Prettified:

var http = require('http');

var app = http.createServer(function(req,res){
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify({ a: 1 }, null, 3));
});
app.listen(3000);

// >  {
// >     "a": 1
// >  }

আমি নিশ্চিত নই কেন আপনি এটি একটি নতুন লাইন দিয়ে শেষ করতে চান তবে আপনি কেবল JSON.stringify(...) + '\n' করতে JSON.stringify(...) + '\n' এটি অর্জন করতে পারেন।

প্রকাশ করা

এক্সপ্রেস ইন আপনি পরিবর্তে অপশন পরিবর্তন করে এই কাজ করতে পারেন।

'json replacer' JSON প্রতিলিপি কলব্যাক, ডিফল্টরূপে অস্পষ্ট

'json spaces' বিন্যাসকরণের জন্য JSON প্রতিক্রিয়া স্পেস, বিকাশে ২ টিতে ডিফল্ট, 0 টি উত্পাদন

আসলে 40 সেট করতে সুপারিশ করা হয় না

app.set('json spaces', 40);

তারপর আপনি শুধু কিছু জson সঙ্গে সাড়া দিতে পারে।

res.json({ a: 1 });

এটি 'json spaces স্পেসস' কনফিগারেশন ব্যবহার করতে হবে এটি prettify।





httpresponse