আমি নোড.জেএস (উদাহরণস্বরূপ একটি দূরবর্তী ওয়েব পরিষেবাতে কল করুন এবং ক্লায়েন্টের প্রতিক্রিয়ার প্রতিধ্বনি) ব্যবহার করে এইচটিটিপি অনুরোধ থেকে তথ্য ব্যবহার করতে চাইছি।
পিএইচপি-তে আমি এটি করতে সিআরএল ব্যবহার করতাম। নোডের সেরা অনুশীলন কী?
আমি নোড.জেএস (উদাহরণস্বরূপ একটি দূরবর্তী ওয়েব পরিষেবাতে কল করুন এবং ক্লায়েন্টের প্রতিক্রিয়ার প্রতিধ্বনি) ব্যবহার করে এইচটিটিপি অনুরোধ থেকে তথ্য ব্যবহার করতে চাইছি।
পিএইচপি-তে আমি এটি করতে সিআরএল ব্যবহার করতাম। নোডের সেরা অনুশীলন কী?
উত্তর:
সম্পূর্ণ উদাহরণের জন্য এইচটিটিপি মডিউলের জন্য ডকুমেন্টেশন দেখুন:
https://nodejs.org/api/http.html#http_http_request_options_callback
cURL
কমান্ডটি নোড.জেএস
http
মডিউল আপনাকে সার্ভার চালানোর জন্য ব্যবহার এছাড়াও দূরবর্তী অনুরোধ করার জন্য ব্যবহার করা হয়।
এখানে তাদের দস্তাবেজের উদাহরণ রয়েছে:
var http = require("http");
var options = {
host: 'www.google.com',
port: 80,
path: '/upload',
method: 'POST'
};
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('data\n');
req.write('data\n');
req.end();
request
- npmjs.com/package/request - এবং ভোট দিন নীতীশ এর উত্তর, নিচে, যা 2018 ভালো উত্তর
আপনি সহজেই অনুরোধ মডিউলটি ব্যবহার করতে পারেন:
https://www.npmjs.com/package/request
কোডের উদাহরণ:
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
else {
console.log("Error "+response.statusCode)
}
})
যেহেতু দেখতে দেখতে node-curl
মারা গেছে, তাই আমি এটিকে কাঁটাচামচ করেছি, নামকরণ করেছি, এবং আরও কার্ল হতে চাই এবং উইন্ডোজের অধীনে সংকলন করেছি।
ব্যবহারের উদাহরণ:
var Curl = require( 'node-libcurl' ).Curl;
var curl = new Curl();
curl.setOpt( Curl.option.URL, 'www.google.com' );
curl.setOpt( 'FOLLOWLOCATION', true );
curl.on( 'end', function( statusCode, body, headers ) {
console.info( statusCode );
console.info( '---' );
console.info( body.length );
console.info( '---' );
console.info( headers );
console.info( '---' );
console.info( this.getInfo( Curl.info.TOTAL_TIME ) );
this.close();
});
curl.on( 'error', function( err, curlErrorCode ) {
console.error( err.message );
console.error( '---' );
console.error( curlErrorCode );
this.close();
});
curl.perform();
পারফর্ম হ'ল অ্যাসিঙ্ক, এবং এটি বর্তমানে সিঙ্ক্রোনাস ব্যবহারের কোনও উপায় নেই (এবং সম্ভবত কখনও তা হবে না)।
এটি এখনও আলফাতে রয়েছে তবে এটি শীঘ্রই পরিবর্তন হতে চলেছে, এবং সহায়তার প্রশংসা করা হচ্ছে।
এখন Easy
সিঙ্ক অনুরোধের জন্য সরাসরি হ্যান্ডেল ব্যবহার করা সম্ভব , উদাহরণস্বরূপ:
var Easy = require( 'node-libcurl' ).Easy,
Curl = require( 'node-libcurl' ).Curl,
url = process.argv[2] || 'http://www.google.com',
ret, ch;
ch = new Easy();
ch.setOpt( Curl.option.URL, url );
ch.setOpt( Curl.option.HEADERFUNCTION, function( buf, size, nmemb ) {
console.log( buf );
return size * nmemb;
});
ch.setOpt( Curl.option.WRITEFUNCTION, function( buf, size, nmemb ) {
console.log( arguments );
return size * nmemb;
});
// this call is sync!
ret = ch.perform();
ch.close();
console.log( ret, ret == Curl.code.CURLE_OK, Easy.strError( ret ) );
এছাড়াও, প্রকল্পটি এখন স্থিতিশীল!
node tools/retrieve-win-deps && node tools/generate-stubs && node-gyp rebuild
পদক্ষেপের সময় । কোন চিন্তা?
$ apt-get install libcurl4-openssl-dev
-L
কোনওভাবে বিকল্পটি ব্যবহার করতে পারেন ?
curl.setOpt( 'FOLLOWLOCATION', true );
। বিটিডব্লিউ, এর মতো প্রশ্নগুলি এই মন্তব্য বিভাগের চেয়ে ইস্যু ট্র্যাকারের পক্ষে আরও উপযুক্ত । ;)
নতুন প্রকল্পগুলির জন্য দয়া করে অনুরোধ ব্যবহার করা থেকে বিরত থাকুন, যেহেতু এখন প্রকল্পটি মেরিটেনেন্স মোডে রয়েছে এবং অবশেষে হ্রাস পাবে
https://github.com/request/request/issues/3142
এর পরিবর্তে আমি অ্যাক্সিয়োসের পরামর্শ দেব , গ্রন্থাগারটি নোডের সর্বশেষ মানগুলির সাথে সামঞ্জস্যপূর্ণ এবং এটি উন্নত করার জন্য কিছু উপলভ্য প্লাগইন রয়েছে যা মক সার্ভারের প্রতিক্রিয়াগুলি, স্বয়ংক্রিয় পুনরায় চেষ্টা এবং অন্যান্য বৈশিষ্ট্য সক্ষম করে।
https://github.com/axios/axios
const axios = require('axios');
// Make a request for a user with a given ID
axios.get('/user?ID=12345')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
বা অ্যাসিঙ্ক ব্যবহার / অপেক্ষা করুন:
try{
const response = await axios.get('/user?ID=12345');
console.log(response)
} catch(axiosErr){
console.log(axiosErr)
}
আমি সাধারণত রিক্যুয়েস্ট ব্যবহার করি, এটি নোড.জেএস এর জন্য একটি সরলীকৃত তবে শক্তিশালী HTTP ক্লায়েন্ট
https://github.com/request/request
এটি এনপিএম-এ রয়েছে
npm install request
এখানে একটি ব্যবহারের নমুনা দেওয়া হয়েছে:
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
})
উপরোক্ত উদাহরণগুলি কাজ করে তবে সত্যিকারের বিশ্বের উদাহরণের সাথে কাজ করে না don't তথ্যগুলিকে একটি অ্যারেতে ঠেলে দিন (জেএসে এটি করার দ্রুততম উপায়) এবং একটি 'শেষ' হ্যান্ডলার যা তাদের সকলের সাথে একসাথে যোগদান করে যাতে আপনি এটি ফিরিয়ে দিতে পারেন।
আপনি যখন বড় অনুরোধগুলি (5000+ লাইন) নিয়ে কাজ করছেন তখন এটি বিশেষত প্রয়োজনীয় এবং সার্ভার আপনাকে একগুচ্ছ ডেটা প্রেরণ করে।
এখানে আমার একটি প্রোগ্রামের একটি উদাহরণ (কফিসিপি): https://gist.github.com/1105888
উদাহরণস্বরূপ https://github.com/joyent/node/wiki/modules#wiki-tcp সম্পর্কে কীভাবে । খুব দ্রুত সংক্ষিপ্তসার =>
অনুরোধের মতো কার্ল তৈরির জন্য এনপিএম মডিউল রয়েছে, npm curlrequest
।
ধাপ 1: $npm i -S curlrequest
পদক্ষেপ 2: আপনার নোড ফাইলে
let curl = require('curlrequest')
let options = {} // url, method, data, timeout,data, etc can be passed as options
curl.request(options,(err,response)=>{
// err is the error returned from the api
// response contains the data returned from the api
})
আরও পড়ার এবং বোঝার জন্য, এনপিএম কার্লিক্যুয়েস্ট
অনুরোধ এনপিএম মডিউল এবং কল পরে ব্যবহার করুন
var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
});
সেরা অনুশীলনের জন্য কিছু উইনস্টন লগার মডিউল বা অন্য কোনও সরল কনসোল.লগ ব্যবহার করুন এবং তারপরে আপনার অ্যাপ্লিকেশনটি চালান run
npm start output.txt
উপরের কমান্ডের ফলাফলটি আপনাকে কনসোল.লগতে মুদ্রিত সমস্ত ডেটা সহ রুটে একটি টেক্সট ফাইল তৈরি করবে
গ্রুর্ট শেল লাইব্রেরিটি ব্যবহার করে শেষ করেছি ।
এখানে EdgeCast এপিআই সঙ্গে কাজ সম্পর্কে অন্য কেউ চিন্তা করার জন্য আমার পুরোপুরি বাস্তবায়িত ঘোঁৎ ঘোঁৎ কাজের জন্য আমার সোর্স সারকথা হয়। আপনি আমার উদাহরণে দেখতে পাবেন যে আমি সিডিএন শুদ্ধ করার কার্ল কমান্ডটি কার্যকর করতে গ্রুর্ট শেল ব্যবহার করি।
এই হ'ল আমি নোডের মধ্যে কাজ করার জন্য এইচটিটিপি অনুরোধ পাওয়ার জন্য কয়েক ঘন্টা চেষ্টা করার পরে শেষ করেছি। আমি রুবি এবং পাইথনে একজনকে কাজ করতে সক্ষম হয়েছি, তবে এই প্রকল্পের প্রয়োজনীয়তা পূরণ করি নি।
রিক্লিয়েন্ট ব্যবহার করে , এটি শীর্ষে একটি ছোট ক্লায়েন্ট মডিউল request
যা আপনাকে ক্রিয়াল স্টাইল দিয়ে সমস্ত ক্রিয়াকলাপ লগ করতে দেয় ( , বিকাশের পরিবেশের জন্য) । এছাড়াও ইউআরএল এবং প্যারামিটারগুলি পার্সিং, প্রমাণীকরণের সংহতকরণ, ক্যাশে সমর্থন ইত্যাদির মতো দুর্দান্ত বৈশিষ্ট্য রয়েছে has
উদাহরণস্বরূপ, আপনি যদি ক্লায়েন্ট অবজেক্ট তৈরি করেন তবে একটি অনুরোধ করুন:
var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
baseUrl:"http://baseurl.com/api/v1.1",
debugRequest:true, debugResponse:true
});
var resp = client.post("client/orders", {"client":1234,"ref_id":"A987"}, {headers: {"x-token":"AFF01XX"}})
এটি কনসোলের মধ্যে এই জাতীয় কিছুতে লগ করবে:
[Requesting client/orders]-> -X POST http://baseurl.com/api/v1.1/client/orders -d '{"client": 1234, "ref_id": "A987"}' -H '{"x-token": "AFF01XX"}' -H Content-Type:application/json
[Response client/orders]<- Status 200 - {"orderId": 1320934}
অনুরোধে কোনো ফিরে আসবে প্রতিশ্রুতি যাতে আপনি নিতে পারেন বস্তু, then
এবং catch
এর ফল কী হয়েছিল না।
reqclient
সাথে উপলব্ধ npm আপনার সাথে মডিউল ইনস্টল করতে পারেন: npm install reqclient
।
আইওটি রাস্পবেরিপি থেকে ক্লাউড ডিবিতে পোষ্ট ডেটা প্রেরণে আমার সমস্যা হয়েছিল, তবে কয়েক ঘন্টা পরে আমি সরাসরি এটি পেতে সক্ষম হয়েছি।
আমি এটি করার জন্য কমান্ড প্রম্পট ব্যবহার করেছি।
sudo curl --URL http://<username>.cloudant.com/<database_name> --user <api_key>:<pass_key> -X POST -H "Content-Type:application/json" --data '{"id":"123","type":"987"}'
কমান্ড প্রম্পট সমস্যাগুলি দেখাবে - ভুল ব্যবহারকারী নাম / পাস; খারাপ অনুরোধ ইত্যাদি
- ইউআরএল ডাটাবেস / সার্ভারের অবস্থান (আমি সাধারণ নিখরচায় ক্লাউড্যান্ট ডিবি ব্যবহার করেছি) - ব্যবহারকারী হ'ল অনুমোদনের অংশ ব্যবহারকারী নাম: আমি এপিআই পাস দিয়ে প্রবেশ করিয়েছি -X কী কমান্ড কল করতে হবে তা নির্ধারণ করে (পুট, জিইটি, পোস্ট, ডিলেট) -এইচ সামগ্রী - ক্লাউডেন্ট হ'ল ডকুমেন্ট ডাটাবেস সম্পর্কে, যেখানে জেএসওএন ব্যবহৃত হয় - ডেটা সামগ্রী নিজেই জেএসএন হিসাবে সাজানো
অনুরোধ এনপিএম মডিউল অনুরোধ নোড ছাঁচ ব্যবহার করা ভাল, এটি পেতে / পোস্ট অনুরোধের জন্য বিকল্প সেটিংস রয়েছে এবং এটি উত্পাদন পরিবেশেও ব্যাপকভাবে ব্যবহৃত হয়।
আপনি এই জাতীয় কিছু ব্যবহার করতে চেষ্টা করতে পারেন
curl = require('node-curl');
curl('www.google.com', function(err) {
console.info(this.status);
console.info('-----');
console.info(this.body);
console.info('-----');
console.info(this.info('SIZE_DOWNLOAD'));
});
আপনি অনুরোধ এনপিএম মডিউল ব্যবহার করতে পারেন। ব্যবহারের জন্য দুর্দান্ত। অনুরোধটি এইচটিপি কল করার সহজতম উপায় হিসাবে ডিজাইন করা হয়েছে। এটি HTTPS সমর্থন করে এবং ডিফল্টরূপে পুনঃনির্দেশগুলি অনুসরণ করে।
var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
});
http.request
...