নোড.জেএস এর অভ্যন্তরে কীভাবে দূরবর্তী আরএসটি কল করা যায়? কোন সিআরএল?


189

ইন Node.js , সন্তানের প্রক্রিয়া ব্যবহার করতে ব্যতীত অন্য কার্ল কল, সেখানে দূরবর্তী সার্ভারে কার্ল কল করার জন্য একটি উপায় বিশ্রাম এপিআই এবং বিনিময়ে ডেটা পেতে?

আমারও দূরবর্তী REST কলটিতে অনুরোধ শিরোনাম সেট আপ করতে হবে, এবং জিইটি (বা পোষ্ট) তেও স্ট্রিংয়ের পাশাপাশি কোয়েরি করা দরকার।

আমি এটি খুঁজে পেয়েছি: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs

তবে এটি পোষ্ট কোয়েরি স্ট্রিংয়ের কোনও উপায় দেখায় না।


উত্তর:


212

তাকানো http.request

var options = {
  host: url,
  port: 80,
  path: '/resource?id=foo&bar=baz',
  method: 'POST'
};

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);
  });
}).end();

3
সুতরাং, এমনকি এটি পোস্টও, আমিও ক্যোরি স্ট্রিংয়ে ডেটা যুক্ত করি?
মুরভিনলাই

3
পছন্দ করেছেন ডক্স, উত্স, এইচটিটিপি অনুমান পড়তে যান। এই অঞ্চলের বিশেষজ্ঞ নন।
রায়নস

15
একটি বিষয় লক্ষণীয় হ'ল আপনি নিজের হোস্ট এন্ট্রিতে HTTP বা https রাখেন না যেমন var বিকল্প = {হোস্ট: গ্রাফ.ফেসবুক.কম ....} নয় {হোস্ট: HTTP: গ্রাফ.ফেসবুক.কম}}} এটি আমাকে কয়েক চক্রের জন্য ছড়িয়ে দিয়েছে। (নিচে দেখ). এটি উভয়ই দুর্দান্ত উত্তর। আপনাদের দুজনকেই ধন্যবাদ।
বাইনারিগ্যান্ট

9
আমি কি কেবল উল্লেখ করতে পারি যে উত্তরটি দীর্ঘ হলে, রেস.অন ('ডেটা', ..) ব্যবহার করা যথেষ্ট নয়। আমি বিশ্বাস করি যে আপনি সমস্ত ডেটা কখন পেয়েছেন তা জানতে সঠিক উপায়টিও রেসন ('শেষ' ..) করা। তারপরে আপনি প্রক্রিয়া করতে পারেন।
জেরারি

4
এটি একটি খুব পুরানো উত্তর - যারা নোড জেএস লেখেন তাদের আজ আপনি অবশ্যই এনএমপিজেএস.com / package / node- fetch বা অন্যান্য আনতে হবে API ভিত্তিক প্যাকেজ, যা আনতে হবে স্ট্যান্ডার্ডের উপর ভিত্তি করে। আমার উত্তর নীচে দেখুন।
সেল

95

অনুরোধটি কীভাবে ব্যবহার করবেন - সরলীকৃত এইচটিটিপি ক্লায়েন্ট

2020 ফেব্রুয়ারী সম্পাদনা করুন: অনুরোধটি হ্রাস পেয়েছে সুতরাং আপনার আর সম্ভবত এটি ব্যবহার করা উচিত নয়।

এখানে একটি জিইটি:

var request = require('request');
request('http://www.google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body) // Print the google web page.
     }
})

ওপিও একটি পোস্ট চেয়েছিল:

request.post('http://service.com/upload', {form:{key:'value'}})

1
গুগল ডট কম নিয়ে কাজ করে তবে ফেসবুকের গ্রাফ এপিআইয়ের অনুরোধ করার সময় "অনুরোধের ত্রুটি: ত্রুটি: সকেট হ্যাং আপ" ফিরতি। দয়া করে গাইড করুন, ধন্যবাদ!
ডায়নামিক রেমো

এই মডিউলটিতে প্রচুর সমস্যা রয়েছে!
প্রতীক সিংহল

এইভাবে একটি REST এপিআই গ্রহণ করার সময় আমি কীভাবে একটি অনুরোধের প্যারামিটারটি পাস করতে পারি?
vdenotaris

2
ফেব্রুয়ারী 11 শে 2020 পর্যন্ত, অনুরোধটি সম্পূর্ণভাবে বাতিল করা হয়েছে আপনি এটি github.com/request/request#drecated
সাদিয়েল

কোন newbies ব্যবহার করা উচিত কোন নির্দেশিকা? আমি প্রচুর উদাহরণগুলির মাধ্যমে ফিল্টার করছি যা এটি ব্যবহার করে।
স্টিভ

36

Http://isolasoftware.it/2012/05/28/call-rest-api-with-node-js/ এ দেখুন

var https = require('https');

/**
 * HOW TO Make an HTTP Call - GET
 */
// options for GET
var optionsget = {
    host : 'graph.facebook.com', // here only the domain name
    // (no http/https !)
    port : 443,
    path : '/youscada', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

console.info('Options prepared:');
console.info(optionsget);
console.info('Do the GET call');

// do the GET request
var reqGet = https.request(optionsget, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);


    res.on('data', function(d) {
        console.info('GET result:\n');
        process.stdout.write(d);
        console.info('\n\nCall completed');
    });

});

reqGet.end();
reqGet.on('error', function(e) {
    console.error(e);
});

/**
 * HOW TO Make an HTTP Call - POST
 */
// do a POST request
// create the JSON object
jsonObject = JSON.stringify({
    "message" : "The web of things is approaching, let do some tests to be ready!",
    "name" : "Test message posted with node.js",
    "caption" : "Some tests with node.js",
    "link" : "http://www.youscada.com",
    "description" : "this is a description",
    "picture" : "http://youscada.com/wp-content/uploads/2012/05/logo2.png",
    "actions" : [ {
        "name" : "youSCADA",
        "link" : "http://www.youscada.com"
    } ]
});

// prepare the header
var postheaders = {
    'Content-Type' : 'application/json',
    'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
};

// the post options
var optionspost = {
    host : 'graph.facebook.com',
    port : 443,
    path : '/youscada/feed?access_token=your_api_key',
    method : 'POST',
    headers : postheaders
};

console.info('Options prepared:');
console.info(optionspost);
console.info('Do the POST call');

// do the POST call
var reqPost = https.request(optionspost, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);

    res.on('data', function(d) {
        console.info('POST result:\n');
        process.stdout.write(d);
        console.info('\n\nPOST completed');
    });
});

// write the json data
reqPost.write(jsonObject);
reqPost.end();
reqPost.on('error', function(e) {
    console.error(e);
});

/**
 * Get Message - GET
 */
// options for GET
var optionsgetmsg = {
    host : 'graph.facebook.com', // here only the domain name
    // (no http/https !)
    port : 443,
    path : '/youscada/feed?access_token=you_api_key', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

console.info('Options prepared:');
console.info(optionsgetmsg);
console.info('Do the GET call');

// do the GET request
var reqGet = https.request(optionsgetmsg, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);


    res.on('data', function(d) {
        console.info('GET result after POST:\n');
        process.stdout.write(d);
        console.info('\n\nCall completed');
    });

});

reqGet.end();
reqGet.on('error', function(e) {
    console.error(e);
});

1
আমি কীভাবে ডি থেকে মানগুলি অ্যাক্সেস করব ??? d = {"ডেটা": [{"আইডি": 1111, "নাম": "পিটার"}]}} কিভাবে নাম মান পেতে?
পিটার

2
var thed = JSON.parse (d) ব্যবহার করে মানগুলি অর্জন করতে পরিচালিত; কনসোল.লগ ("আইডিটি হ'ল:" + thed.data [0] .id); তবে কিছু সময় আমি "ইনপুটটির অপ্রত্যাশিত শেষ" পাই
পিটার

33

আমি নোড-ফেচ ব্যবহার করি কারণ এটি পরিচিত (যদি আপনি ওয়েব বিকাশকারী হন) ফেচ () এপিআই ব্যবহার করে । ব্রাউজার থেকে নির্বিচার HTTP অনুরোধ করার নতুন উপায় হ'ল ফ্যাচ ()।

হ্যাঁ আমি জানি এটি একটি নোড জেএস প্রশ্ন, তবে আমরা কী এপিআইয়ের বিকাশকারীদের মুখস্থ করতে এবং বুঝতে হবে এবং আমাদের জাভাস্ক্রিপ্ট কোডটির পুনঃব্যবহারযোগ্যতা উন্নত করতে হবে তা কমিয়ে দিতে চাই না? আনয়ন একটি মান তাই আমরা কীভাবে এটি রূপান্তর করব?

আনার () আনার অন্য সুন্দর জিনিসটি এটি একটি জাভাস্ক্রিপ্ট প্রতিশ্রুতি দেয় , যাতে আপনি এটির মতো এসিঙ্ক কোডটি লিখতে পারেন:

let fetch = require('node-fetch');

fetch('http://localhost', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{}'
}).then(response => {
  return response.json();
}).catch(err => {console.log(err);});

এক্সএমএলএইচটিপিআরকিউস্ট সুপারসাইডগুলি আনুন । এখানে আরও কিছু তথ্য


node-fetchএপিআইগুলি লেখার সময় সমস্যাটি হ'ল কেবল ইউআরএল সম্পূর্ণরূপে কাজ করে এবং আপেক্ষিক ইউআরএলগুলির সাথে কাজ করবে না।
সেবাস্তিয়ান


5

Axios

নোড.জেএস-তে অক্ষ ব্যবহার করে একটি উদাহরণ (axios_example.js):

const axios = require('axios');
const express = require('express');
const app = express();
const port = process.env.PORT || 5000;

app.get('/search', function(req, res) {
    let query = req.query.queryStr;
    let url = `https://your.service.org?query=${query}`;

    axios({
        method:'get',
        url,
        auth: {
            username: 'the_username',
            password: 'the_password'
        }
    })
    .then(function (response) {
        res.send(JSON.stringify(response.data));
    })
    .catch(function (error) {
        console.log(error);
    });
});

var server = app.listen(port);

আপনি যে প্রকল্প প্রকল্পটি করেন তা নিশ্চিত হন:

npm init
npm install express
npm install axios
node axios_example.js

তারপরে আপনি এখানে নিজের ব্রাউজারটি ব্যবহার করে নোড.জেস আরএসটি এপিআই পরীক্ষা করতে পারেন: http://localhost:5000/search?queryStr=xxxxxxxxx

একইভাবে আপনি পোস্ট করতে পারেন, যেমন:

axios({
  method: 'post',
  url: 'https://your.service.org/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

SuperAgent

একইভাবে আপনি সুপার এজেন্ট ব্যবহার করতে পারেন।

superagent.get('https://your.service.org?query=xxxx')
.end((err, response) => {
    if (err) { return console.log(err); }
    res.send(JSON.stringify(response.body));
});

এবং যদি আপনি বেসিক প্রমাণীকরণ করতে চান:

superagent.get('https://your.service.org?query=xxxx')
.auth('the_username', 'the_password')
.end((err, response) => {
    if (err) { return console.log(err); }
    res.send(JSON.stringify(response.body));
});

সূত্র:


5

সর্বশেষতম Async / অ্যাওয়েট বৈশিষ্ট্যগুলি ব্যবহার করতে

https://www.npmjs.com/package/request-promise-native

npm install --save request
npm install --save request-promise-native

// কোড

async function getData (){
    try{
          var rp = require ('request-promise-native');
          var options = {
          uri:'https://reqres.in/api/users/2',
          json:true
        };

        var response = await rp(options);
        return response;
    }catch(error){
        throw error;
    }        
}

try{
    console.log(getData());
}catch(error){
    console.log(error);
}

4

অন্য একটি উদাহরণ - আপনাকে তার জন্য অনুরোধ মডিউল ইনস্টল করতে হবে

var request = require('request');
function get_trustyou(trust_you_id, callback) {
    var options = {
        uri : 'https://api.trustyou.com/hotels/'+trust_you_id+'/seal.json',
        method : 'GET'
    }; 
    var res = '';
    request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            res = body;
        }
        else {
            res = 'Not Found';
        }
        callback(res);
    });
}

get_trustyou("674fa44c-1fbd-4275-aa72-a20f262372cd", function(resp){
    console.log(resp);
});

4
var http = require('http');
var url = process.argv[2];

http.get(url, function(response) {
  var finalData = "";

  response.on("data", function (data) {
    finalData += data.toString();
  });

  response.on("end", function() {
    console.log(finalData.length);
    console.log(finalData.toString());
  });

});

3

আমি সিআরএল সহ কোনও পাইনি তাই আমি নোড-লিবকুর্লের চারপাশে একটি মোড়ক লিখেছিলাম এবং https://www.npmjs.com/package/vps-rest-client এ পাওয়া যাবে ।

একটি পোষ্ট তৈরি করা যেমন:

var host = 'https://api.budgetvm.com/v2/dns/record';
var key = 'some___key';
var domain_id = 'some___id';

var rest = require('vps-rest-client');
var client = rest.createClient(key, {
  verbose: false
});

var post = {
  domain: domain_id,
  record: 'test.example.net',
  type: 'A',
  content: '111.111.111.111'
};

client.post(host, post).then(function(resp) {
  console.info(resp);

  if (resp.success === true) {
    // some action
  }
  client.close();
}).catch((err) => console.info(err));

2

আপনার যদি নোড.জেএস ৪.৪+ আছে , তবে পুনরুদ্ধারের দিকে একবার নজর দিন , এটি আপনাকে কলগুলি করতে এবং অনুরোধগুলি সিআরএল স্টাইলে লগ করতে দেয় , যাতে আপনি সহজেই অ্যাপ্লিকেশনের বাইরে কলগুলি পরীক্ষা করে এবং পুনরুত্পাদন করতে পারেন।

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

এটি কীভাবে এটি আরম্ভ করা যায়, একটি কল করা এবং কার্ল শৈলীতে ক্রিয়াকলাপটি লগ করা যায় তার একটি উদাহরণ :

var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
    baseUrl:"http://baseurl.com/api/", debugRequest:true, debugResponse:true});
client.post("client/orders", {"client": 1234, "ref_id": "A987"},{"x-token": "AFF01XX"});

এটি কনসোলে লগ ইন করবে ...

[Requesting client/orders]-> -X POST http://baseurl.com/api/client/orders -d '{"client": 1234, "ref_id": "A987"}' -H '{"x-token": "AFF01XX"}' -H Content-Type:application/json

এবং প্রতিক্রিয়া যখন ফিরে আসে ...

[Response   client/orders]<- Status 200 - {"orderId": 1320934}

প্রতিশ্রুতি বস্তুর সাথে প্রতিক্রিয়াটি কীভাবে পরিচালনা করতে হবে এটি একটি উদাহরণ:

client.get("reports/clients")
  .then(function(response) {
    // Do something with the result
  }).catch(console.error);  // In case of error ...

অবশ্যই, এটা দিয়ে ইনস্টল করা যাবে: npm install reqclient


1

আপনি কী অনুরোধের সময়টি করতে চান তা সহজেই সেট করতে আপনি কার্লিকোয়েস্ট ব্যবহার করতে পারেন ... আপনি এমনকি ব্রাউজার কলকে " নকল " করতে বিকল্পগুলিতে শিরোলেখ সেট করতে পারেন ।


0

আমি উপস্থাপককে সত্যিই দরকারী বলে মনে করেছি এটি উদাহরণস্বরূপ খুব সহজ

const superagent=require('superagent')
superagent
.get('google.com')
.set('Authorization','Authorization object')
.set('Accept','application/json')

0

সতর্কতা: 11 ই ফেব্রুয়ারী 1120, অনুরোধ সম্পূর্ণরূপে হ্রাস করা হয়েছে।

যদি আপনি ফর্ম-ডেটা সহ আরও তথ্যের জন্য প্রয়োগ করেন ( https://tanaikech.github.io/2017/07/27/m Multipart-post-request-using- node.js ):

var fs = require('fs');
var request = require('request');
request.post({
  url: 'https://slack.com/api/files.upload',
  formData: {
    file: fs.createReadStream('sample.zip'),
    token: '### access token ###',
    filetype: 'zip',
    filename: 'samplefilename',
    channels: 'sample',
    title: 'sampletitle',
  },
}, function (error, response, body) {
  console.log(body);
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.