আমি নোড.জেএস বা এক্সপ্রেস.জেএস এর মধ্যে কীভাবে এইচটিটিপি অনুরোধ করব? আমার অন্য একটি পরিষেবাতে সংযোগ করা দরকার। আমি আশা করছি কলটি অবিচ্ছিন্ন এবং কলব্যাকটিতে দূরবর্তী সার্ভারের প্রতিক্রিয়া রয়েছে।
আমি নোড.জেএস বা এক্সপ্রেস.জেএস এর মধ্যে কীভাবে এইচটিটিপি অনুরোধ করব? আমার অন্য একটি পরিষেবাতে সংযোগ করা দরকার। আমি আশা করছি কলটি অবিচ্ছিন্ন এবং কলব্যাকটিতে দূরবর্তী সার্ভারের প্রতিক্রিয়া রয়েছে।
উত্তর:
আমার একটি নমুনা থেকে কিছু কোডের স্নিপেট এখানে। এটি অ্যাসিঙ্ক্রোনাস এবং একটি JSON অবজেক্ট প্রদান করে। এটি জিইটি অনুরোধের যে কোনও ফর্ম করতে পারে।
মনে রাখবেন আরও সর্বোত্তম উপায় রয়েছে (কেবলমাত্র একটি নমুনা) - উদাহরণস্বরূপ, আপনি কোনও অ্যারে রেখেছিলেন সেই অংশগুলিকে বোঝানোর পরিবর্তে এবং এতে যোগ দিন ... আশা করি, এটি আপনাকে সঠিক দিকে শুরু করবে:
const http = require('http');
const https = require('https');
/**
* getJSON: RESTful GET request returning JSON object(s)
* @param options: http options object
* @param callback: callback to pass the results JSON object(s) back
*/
module.exports.getJSON = (options, onResult) => {
console.log('rest::getJSON');
const port = options.port == 443 ? https : http;
let output = '';
const req = port.request(options, (res) => {
console.log(`${options.host} : ${res.statusCode}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
output += chunk;
});
res.on('end', () => {
let obj = JSON.parse(output);
onResult(res.statusCode, obj);
});
});
req.on('error', (err) => {
// res.send('error: ' + err.message);
});
req.end();
};
এটিকে একটি বিকল্প বিকল্প তৈরি করে বলা হয়:
const options = {
host: 'somesite.com',
port: 443,
path: '/some/path',
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
};
এবং একটি কলব্যাক ফাংশন প্রদান।
উদাহরণস্বরূপ, একটি পরিষেবাদিতে আমার উপরে ওপেনস্টিক মডিউল প্রয়োজন এবং তারপরে এটি করুন:
rest.getJSON(options, (statusCode, result) => {
// I could work with the resulting HTML/JSON here. I could also just return it
console.log(`onResult: (${statusCode})\n\n${JSON.stringify(result)}`);
res.statusCode = statusCode;
res.send(result);
});
আপনি যদি async
/ await
(লিনিয়ার, কোনও কলব্যাক) খুঁজছেন না, প্রতিশ্রুতি দিবেন, সময় সমর্থন এবং ইন্টিলিজেন্স সংকলন করুন, আমরা একটি হালকা এইচটিটিপি এবং আরএসইএস ক্লায়েন্ট তৈরি করেছি যা সেই বিলটির সাথে খাপ খায়:
Node.js এ সাধারণ http.get(options, callback)
ফাংশনটি ব্যবহার করে দেখুন :
var http = require('http');
var options = {
host: 'www.google.com',
path: '/index.html'
};
var req = http.get(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
// Buffer the body entirely for processing as a whole.
var bodyChunks = [];
res.on('data', function(chunk) {
// You can process streamed parts here...
bodyChunks.push(chunk);
}).on('end', function() {
var body = Buffer.concat(bodyChunks);
console.log('BODY: ' + body);
// ...and/or process the entire body here.
})
});
req.on('error', function(e) {
console.log('ERROR: ' + e.message);
});
একটি সাধারণ http.request(options, callback)
ফাংশন রয়েছে যা আপনাকে অনুরোধের পদ্ধতি এবং অন্যান্য অনুরোধের বিশদটি নির্দিষ্ট করতে দেয়।
GET
আমার এই ইউআরএল থাকলে আমি কীভাবে এই অনুরোধটি ব্যবহার করতে পারি ? graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
?
অনুরোধ এবং সুপারভাইজেন্টগুলি ব্যবহার করার জন্য বেশ ভাল গ্রন্থাগার।
দ্রষ্টব্য: অনুরোধ হ্রাস করা হয়েছে , আপনার ঝুঁকিতে ব্যবহার করুন!
ব্যবহার request
:
var request=require('request');
request.get('https://someplace',options,function(err,res,body){
if(err) //TODO: handle err
if(res.statusCode === 200 ) //etc
//TODO Do something with response
});
আপনি অনুরোধও ব্যবহার করতে পারেন , একটি সত্যিই শীতল ও খুব সহজ HTTP- র ক্লায়েন্ট আমি nodeJS লিখেছেন + + এটা ক্যাশে সমর্থন করে।
জিইটি পদ্ধতি অনুরোধের জন্য কেবল নিম্নলিখিতটি করুন:
var requestify = require('requestify');
requestify.get('http://example.com/api/resource')
.then(function(response) {
// Get the response body (JSON parsed or jQuery object for XMLs)
response.getBody();
}
);
এই সংস্করণটি প্রাথমিকভাবে ব্রায়ানম্যাক ফাংশন দ্বারা প্রস্তাবিত যা প্রতিশ্রুতি, আরও ভাল ত্রুটি পরিচালনা এবং ES6 এ আবার লেখা হয় এর উপর ভিত্তি করে ।
let http = require("http"),
https = require("https");
/**
* getJSON: REST get request returning JSON object(s)
* @param options: http options object
*/
exports.getJSON = function(options)
{
console.log('rest::getJSON');
let reqHandler = +options.port === 443 ? https : http;
return new Promise((resolve, reject) => {
let req = reqHandler.request(options, (res) =>
{
let output = '';
console.log('rest::', options.host + ':' + res.statusCode);
res.setEncoding('utf8');
res.on('data', function (chunk) {
output += chunk;
});
res.on('end', () => {
try {
let obj = JSON.parse(output);
// console.log('rest::', obj);
resolve({
statusCode: res.statusCode,
data: obj
});
}
catch(err) {
console.error('rest::end', err);
reject(err);
}
});
});
req.on('error', (err) => {
console.error('rest::request', err);
reject(err);
});
req.end();
});
};
ফলস্বরূপ আপনাকে কলব্যাক ফাংশনে পাস করতে হবে না, পরিবর্তে জেএসএসন () প্রতিশ্রুতি দেয়। নিম্নলিখিত উদাহরণে একটি এক্সপ্রেসজেএস রুট হ্যান্ডলারের ভিতরে ফাংশনটি ব্যবহৃত হয়
router.get('/:id', (req, res, next) => {
rest.getJSON({
host: host,
path: `/posts/${req.params.id}`,
method: 'GET'
}).then(({status, data}) => {
res.json(data);
}, (error) => {
next(error);
});
});
ত্রুটিতে এটি সার্ভার ত্রুটি মিডলওয়্যার পরিচালনা করার ক্ষেত্রে ত্রুটিটি প্রতিনিধিত্ব করে।
get
রুটের সংজ্ঞায়নের মধ্যে করা যায়, এখানে অনেক পোস্টের অভাব রয়েছে।
নোড থেকে এইচটিটিপি অনুরোধ করার জন্য ইউনিরেস্ট হ'ল সেরা গ্রন্থাগার। এটি একটি মাল্টিপ্লাটফর্ম ফ্রেমওয়ার্ক হিসাবে লক্ষ্য করা হচ্ছে, সুতরাং নোডে এটি কীভাবে কাজ করে তা শিখতে আপনাকে রুবাই, পিএইচপি, জাভা, পাইথন, অবজেক্টিভ সি,। নেট বা উইন্ডোজ 8 এ যদি কোনও HTTP ক্লায়েন্ট ব্যবহার করতে হয় তবে এটি আপনাকে ভালভাবে কাজ করবে। যতদূর আমি বলতে পারি নিরবিচ্ছিন্ন লাইব্রেরিগুলি বেশিরভাগ বিদ্যমান এইচটিটিপি ক্লায়েন্টদের দ্বারা সমর্থিত (যেমন জাভা, অ্যাপাচি এইচটিটিপি ক্লায়েন্ট, নোডে , মাইকের অনুরোধ লিবারি ) - ইউনাইরেস্ট কেবল একটি ভাল এপিআই রেখে দেয়।
নোড.জেএস এর জন্য কয়েকটি কোড উদাহরণ এখানে দেওয়া হয়েছে:
var unirest = require('unirest')
// GET a resource
unirest.get('http://httpbin.org/get')
.query({'foo': 'bar'})
.query({'stack': 'overflow'})
.end(function(res) {
if (res.error) {
console.log('GET error', res.error)
} else {
console.log('GET response', res.body)
}
})
// POST a form with an attached file
unirest.post('http://httpbin.org/post')
.field('foo', 'bar')
.field('stack', 'overflow')
.attach('myfile', 'examples.js')
.end(function(res) {
if (res.error) {
console.log('POST error', res.error)
} else {
console.log('POST response', res.body)
}
})
আপনি নোড ডক্সে সোজা তিড়িং লাফ পারেন এখানে
পরীক্ষা করে দেখুন ছিন্নাংশ । এটি একটি নোড এইচটিটিপি ক্লায়েন্ট যা স্পায়ার.ইও তৈরি এবং রক্ষণাবেক্ষণ করে যা পুনঃনির্দেশগুলি, সেশনগুলি এবং জেএসওএন প্রতিক্রিয়াগুলি পরিচালনা করে। বিশ্রামের API গুলির সাথে ইন্টারঅ্যাক্ট করার জন্য এটি দুর্দান্ত। দেখুন এই ব্লগ পোস্টে আরো বিস্তারিত জানার জন্য।
আপনার যদি কেবল সহজ পেতে অনুরোধ করতে হয় এবং অন্য কোনও এইচটিটিপি পদ্ধতিগুলির জন্য সমর্থন না প্রয়োজন তবে একবার দেখুন: সিম্পল-গেট :
var get = require('simple-get');
get('http://example.com', function (err, res) {
if (err) throw err;
console.log(res.statusCode); // 200
res.pipe(process.stdout); // `res` is a stream
});
রিক্লিয়েন্ট ব্যবহার করুন : স্ক্রিপ্টিং উদ্দেশ্যে request
বা অন্য অনেক লাইব্রেরির জন্য নকশাকৃত নয় । যখন আপনাকে একই কনফিগারেশনটি পুনরায় পুনরায় ব্যবহার করতে হয় প্রয়োজন তখন কনস্ট্রাক্টর অনেক কনফিগারেশন নির্দিষ্ট করে দেয়: বেস ইউআরএল, শিরোনাম, লেখক বিকল্পগুলি, লগিং বিকল্পগুলি, ক্যাশিং ইত্যাদি। এছাড়াও দরকারী বৈশিষ্ট্য যেমন ক্যোরি এবং ইউআরএল পার্সিং, স্বয়ংক্রিয় ক্যোয়ারী এনকোডিং এবং জেএসএন পার্সিং ইত্যাদি
লাইব্রেরিটি ব্যবহারের সর্বোত্তম উপায় হ'ল এপিআইকে নির্দেশ করে অবজেক্টটি রফতানি করার জন্য একটি মডিউল তৈরি করা এবং এর সাথে সংযোগের জন্য প্রয়োজনীয় কনফিগারেশন:
মডিউল client.js
:
let RequestClient = require("reqclient").RequestClient
let client = new RequestClient({
baseUrl: "https://myapp.com/api/v1",
cache: true,
auth: {user: "admin", pass: "secret"}
})
module.exports = client
এবং যে কন্ট্রোলারে আপনার এপিআই ব্যবহারটি গ্রাস করতে হবে:
let client = require('client')
//let router = ...
router.get('/dashboard', (req, res) => {
// Simple GET with Promise handling to https://myapp.com/api/v1/reports/clients
client.get("reports/clients")
.then(response => {
console.log("Report for client", response.userId) // REST responses are parsed as JSON objects
res.render('clients/dashboard', {title: 'Customer Report', report: response})
})
.catch(err => {
console.error("Ups!", err)
res.status(400).render('error', {error: err})
})
})
router.get('/orders', (req, res, next) => {
// GET with query (https://myapp.com/api/v1/orders?state=open&limit=10)
client.get({"uri": "orders", "query": {"state": "open", "limit": 10}})
.then(orders => {
res.render('clients/orders', {title: 'Customer Orders', orders: orders})
})
.catch(err => someErrorHandler(req, res, next))
})
router.delete('/orders', (req, res, next) => {
// DELETE with params (https://myapp.com/api/v1/orders/1234/A987)
client.delete({
"uri": "orders/{client}/{id}",
"params": {"client": "A987", "id": 1234}
})
.then(resp => res.status(204))
.catch(err => someErrorHandler(req, res, next))
})
reqclient
অনেক বৈশিষ্ট্য সমর্থন করে, কিন্তু এটি যে অন্যান্য লাইব্রেরি দ্বারা সমর্থিত নয় কিছু আছে: OAuth2 তে ইন্টিগ্রেশন সঙ্গে এবং এটির ইন্টিগ্রেশন কার্ল সিনট্যাক্স , এবং সবসময় নেটিভ প্রতিশ্রুতি বস্তু ফেরৎ।
আপনার যদি কখনও GET
কোনও অনুরোধ প্রেরণের IP
পাশাপাশি কোনও Domain
(অন্য উত্তরগুলি উল্লেখ করে না তবে আপনি একটি port
পরিবর্তনশীল নির্দিষ্ট করতে পারেন ), আপনি এই ফাংশনটি ব্যবহার করতে পারেন:
function getCode(host, port, path, queryString) {
console.log("(" + host + ":" + port + path + ")" + "Running httpHelper.getCode()")
// Construct url and query string
const requestUrl = url.parse(url.format({
protocol: 'http',
hostname: host,
pathname: path,
port: port,
query: queryString
}));
console.log("(" + host + path + ")" + "Sending GET request")
// Send request
console.log(url.format(requestUrl))
http.get(url.format(requestUrl), (resp) => {
let data = '';
// A chunk of data has been received.
resp.on('data', (chunk) => {
console.log("GET chunk: " + chunk);
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
console.log("GET end of response: " + data);
});
}).on("error", (err) => {
console.log("GET Error: " + err);
});
}
আপনার ফাইলের শীর্ষে প্রয়োজনীয় মডিউলগুলি মিস করবেন না:
http = require("http");
url = require('url')
https
সুরক্ষিত নেটওয়ার্কের মাধ্যমে যোগাযোগের জন্য আপনি মডিউলটি ব্যবহার করতে পারেন তাও মনে রাখবেন । সুতরাং এই দুটি লাইন পরিবর্তন হবে:
https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......
## you can use request module and promise in express to make any request ##
const promise = require('promise');
const requestModule = require('request');
const curlRequest =(requestOption) =>{
return new Promise((resolve, reject)=> {
requestModule(requestOption, (error, response, body) => {
try {
if (error) {
throw error;
}
if (body) {
try {
body = (body) ? JSON.parse(body) : body;
resolve(body);
}catch(error){
resolve(body);
}
} else {
throw new Error('something wrong');
}
} catch (error) {
reject(error);
}
})
})
};
const option = {
url : uri,
method : "GET",
headers : {
}
};
curlRequest(option).then((data)=>{
}).catch((err)=>{
})