নোড.জেএস গেটেড্রিনফো


265

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

eternagame.wikia.com/wiki/EteRNA_Dictionary

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: getaddrinfo ENOTFOUND
    at errnoException (dns.js:37:11)
    at Object.onanswer [as oncomplete] (dns.js:124:16)

আমি ইতিমধ্যে স্ট্যাকওভারফ্লোতে এই ত্রুটিটি দেখেছি এবং বুঝতে পেরেছি যে এটি নোড.জেগুলি ডিএনএস থেকে সার্ভারটি খুঁজে পাচ্ছে না (আমি মনে করি)। তবে, আমার কোডটি পুরোপুরিভাবে কাজ করার কারণে এটি কেন হবে তা আমি নিশ্চিত নই www.google.com

এখানে আমার কোড (হোস্ট পরিবর্তিত পরিবর্তিত একটি খুব অনুরূপ প্রশ্ন থেকে কার্যত অনুলিপি করা এবং আটকানো হয়েছে):

var http = require("http");

var options = {
    host: 'eternagame.wikia.com/wiki/EteRNA_Dictionary'
};

http.get(options, function (http_res) {
    // initialize the container for our data
    var data = "";

    // this event fires many times, each time collecting another piece of the response
    http_res.on("data", function (chunk) {
        // append this chunk to our growing `data` var
        data += chunk;
    });

    // this event fires *one* time, after all the `data` events/chunks have been gathered
    http_res.on("end", function () {
        // you can use res.send instead of console.log to output via express
        console.log(data);
    });
});

এখানে উত্সটি যেখানে আমি অনুলিপি করেছি এবং এগুলি আটকিয়েছি: এক্সপ্রেসজে কীভাবে ওয়েব পরিষেবা কল করবেন?

আমি নোড.জেএস সহ কোনও মডিউল ব্যবহার করছি না

পড়ার জন্য ধন্যবাদ.



রিমোট হোস্ট ব্যবহার করতে var http = require("http");বা var https = require("https");ভিত্তিক করতে হয়েছিল

কি ENOTFOUND মানে?
চার্লি পার্কার

উত্তর:


280

ইন Node.js HTTP মডিউল এর ডকুমেন্টেশন: http://nodejs.org/api/http.html#http_http_request_options_callback

আপনি হয় কল করতে পারেন http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary', callback), ইউআরএল এর পরে পার্স করা হয় url.parse(); বা কল http.get(options, callback), যেখানে optionsআছে

{
  host: 'eternagame.wikia.com',
  port: 8080,
  path: '/wiki/EteRNA_Dictionary'
}

হালনাগাদ

@ এনচেটারআইও-র মন্তব্যে যেমন বলা হয়েছে, portক্ষেত্রটিও একটি পৃথক বিকল্প; এবং প্রোটোকলটি ক্ষেত্রের http://মধ্যে অন্তর্ভুক্ত করা উচিত নয় host। অন্যান্য উত্তরগুলি httpsএসএসএল প্রয়োজন হলে মডিউল ব্যবহারেরও পরামর্শ দেয় ।


16
দ্রুত উত্তর দেওয়ার জন্য ধন্যবাদ, এটি পুরোপুরি কার্যকর! প্রথমে ডক্সটি না পড়ার জন্য আমার নিজের প্রশ্নটিকে হ্রাস করার মতো মনে হচ্ছে।
ভিনিত কোসারাজু

2
আমার সমস্যাটি হ'ল আমার নোডেজ স্ক্রিপ্টের মধ্যে আমি ভুল ইউআরএলটির জন্য একটি অনুরোধ করছিলাম এবং এই ত্রুটি নিক্ষেপ করা হয়েছিল।
মাইকেল জে। ক্যালকিন্স

49
সুতরাং মূলত এটির সংক্ষেপে: ১. কেবলমাত্র আসল হোস্টনামটি এতে অন্তর্ভুক্ত করুন host, তাই না http://বা https://; এবং 2. hostসম্পত্তির মধ্যে পাথ অন্তর্ভুক্ত করবেন না , বরং pathসম্পত্তিতে।
এডুয়ার্ড লুকা

1
লার্নিং নোডে আমার নমুনা কোডটি আমার কাছে এটি পরিষ্কার করে নি। options {...}ব্লকটি পূরণ করার পরে আমি কেন অদ্ভুত ব্যর্থতা পেয়েছি তা বুঝতে পেরেছি ।
মাইকেল শপসিন

+ নিশ্চিত করুন যে বন্দরটি হোস্ট থেকে পৃথক বিকল্প বৈশিষ্ট্যেও রয়েছে।
লুকাস লুকাক

240

এর জন্য ত্রুটির আর একটি সাধারণ উত্স

Error: getaddrinfo ENOTFOUND
    at errnoException (dns.js:37:11)
    at Object.onanswer [as oncomplete] (dns.js:124:16)

প্রোটোকল লিখতে হয় (https, https, ...) hostসম্পত্তি স্থাপন করার সময়options

  // DON'T WRITE THE `http://`
  var options = { 
    host: 'http://yoururl.com',
    path: '/path/to/resource'
  }; 

7
এটি আলোচিতগুলির চেয়ে আরও সাধারণ ত্রুটি।
শোনাকদে

5
এই বিকল্প সমাধান পোস্ট করার জন্য আপনাকে ধন্যবাদ, আমি ঠিক এই মধ্যে চালিয়ে যাচ্ছিলাম।
রায়ান

ধন্যবাদ @ জর্জি আমি HT.request () ব্যবহার করছি যা ত্রুটিটি একইভাবে ছুঁড়েছিল আমি যেভাবে http.get () ব্যবহার করতে যাচ্ছিলাম তবে আমি কেবল http: // অপসারণ করে http.request () দিয়ে এবং কাজ করেছি।
শশীকান্ত পণ্ডিত

17

HTTP অনুরোধের বিকল্পগুলিতে এটিতে স্যুইচ করুন

var options = { host: 'eternagame.wikia.com', 
                path: '/wiki/EteRNA_Dictionary' };

আমি মনে করি এটি আপনার সমস্যার সমাধান করবে।


1
উত্তর করার জন্য ধন্যবাদ! এটিও নিখুঁতভাবে কাজ করে তবে আমি অন্যটিকে সঠিক হিসাবে চিহ্নিত করেছি কারণ এর ডক্স এবং দুটি বিকল্পের সাথে একটি লিঙ্ক রয়েছে।
ভিনিত কোসারাজু

12
  var http=require('http');
   http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary', function(res){
        var str = '';
        console.log('Response is '+res.statusCode);

        res.on('data', function (chunk) {
               str += chunk;
         });

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

  });

উত্তর করার জন্য ধন্যবাদ! রাশবারের উত্তরের মতোই এটিও পুরোপুরি কাজ করে তবে আমি ইয়ুশুয়াংয়ের সঠিক চিহ্নটি চিহ্নিত করেছি কারণ তিনি দুটি বিকল্প এবং ডক্সকে একটি লিঙ্ক দিয়েছেন।
ভিনিত কোসারাজু

1
সমস্যাটি কী এবং কী সমাধান সমাধানের সম্পূর্ণ উত্তর নয় তা কেবল কোড ছাড়াই, আপনার কোডের ব্লকে আপনি কী করেছিলেন তা আমি দেখতে পাচ্ছি না, ধন্যবাদ।
আল-মোতাফার

11

আপনার যদি https ব্যবহার করতে হয় তবে https গ্রন্থাগারটি ব্যবহার করুন

https = require('https');

// options
var options = {
    host: 'eternagame.wikia.com',
    path: '/wiki/EteRNA_Dictionary'
}

// get
https.get(options, callback);


7

আমি মনে করি HTTP পোর্ট 80 এ অনুরোধ করে, যদিও আমি বিকল্প হোস্টে সম্পূর্ণ হোস্ট url উল্লেখ করেছি। আমি যখন সার্ভার অ্যাপ্লিকেশনটি চালিত করি যার মধ্যে API আছে, 80 বন্দরটিতে, যা আমি পূর্বে 3000 বন্দরে চালাচ্ছিলাম, এটি কাজ করেছিল। মনে রাখবেন যে ৮০ বন্দরটিতে একটি অ্যাপ্লিকেশন চালানোর জন্য আপনাকে রুট সুবিধার দরকার হবে।

Error with the request: getaddrinfo EAI_AGAIN localhost:3000:80

এখানে একটি সম্পূর্ণ কোড স্নিপেট

var http=require('http');

var options = {
  protocol:'http:',  
  host: 'localhost',
  port:3000,
  path: '/iso/country/Japan',
  method:'GET'
};

var callback = function(response) {
  var str = '';

  //another chunk of data has been recieved, so append it to `str`
  response.on('data', function (chunk) {
    str += chunk;
  });

  //the whole response has been recieved, so we just print it out here
  response.on('end', function () {
    console.log(str);
  });
}

var request=http.request(options, callback);

request.on('error', function(err) {
        // handle errors with the request itself
        console.error('Error with the request:', err.message);        
});

request.end();

এই উত্তরের গুরুত্বপূর্ণ অংশটি হ'ল প্রোটোকল। nodejs HTTP সঙ্গে পূর্ণ URI সমর্থন দেয়নি host: https://server.com, একই সাথে এখানে উল্লেখ করা হয় stackoverflow.com/a/28385129/432903
prayagupd

3

মনে রাখবেন যে আপনি উল্লেখ করা ডোমেনটি নীচে চলে গেলে (ইজি। আর বিদ্যমান নেই)) এই সমস্যাটিও ঘটতে পারে)


3

আমি এই সঙ্গে এই ত্রুটি স্থির

$ npm info express --verbose
# Error message: npm info retry will retry, error on last attempt: Error: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
$ nslookup registry.npmjs.org
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
registry.npmjs.org  canonical name = a.sni.fastly.net.
a.sni.fastly.net    canonical name = prod.a.sni.global.fastlylb.net.
Name:   prod.a.sni.global.fastlylb.net
Address: 151.101.32.162
$ sudo vim /etc/hosts 
# Add "151.101.32.162 registry.npmjs.org` to hosts file
$ npm info express --verbose
# Works now!

আসল উত্স: https://github.com/npm/npm/issues/6686


2

আমি একই ত্রুটি পেয়েছিলাম এবং সহায়তা পেতে নীচের লিঙ্কটি ব্যবহার করেছি:

https://nodejs.org/api/http.html#http_http_request_options_callback

আমার কোডটি ছিল না:

req.end();

(নোডজেস ভি: ৫.৪.০) একবার উপরে req.end();লাইন যুক্ত করা হয়েছে, আমি ত্রুটি থেকে মুক্তি পেতে সক্ষম হয়েছি এবং আমার পক্ষে ভাল কাজ করেছি।


1

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


মডিউলটির লিঙ্কটির জন্য ধন্যবাদ, তবে আমি http.get () ব্যবহার করে স্ট্যান্ডার্ড নোড.জেএস লাইব্রেরি দিয়ে এটি করার আশা করছিলাম।
ভিনিত কোসারাজু

0

উন্নয়ন পরিবেশ থেকে উত্পাদন পরিবেশে যাওয়ার সময় আমি এই ত্রুটিটি পেয়েছি। আমি https://সমস্ত লিঙ্ক স্থাপন করে আবেশ ছিল । এটি প্রয়োজনীয় নয়, তাই এটি কারও কারও জন্য সমাধান হতে পারে।


0

আমি http এবং অতিরিক্ত স্ল্যাশ (/) থেকে মুক্তি পেয়েছি। আমি এই 'node-test.herokuapp.com' সবেমাত্র ব্যবহার করেছি এবং এটি কার্যকর হয়েছে।


0

এখনও যদি আপনি প্রক্সি সেটিংয়ের জন্য চেকআউটের মুখোমুখি হন তবে আমার জন্য এটি ছিল প্রক্সি সেটিংস যা অনুপস্থিত ছিল এবং সরাসরি http / https অবরুদ্ধ থাকায় অনুরোধটি করতে সক্ষম হয় নি। অনুরোধ করার সময় আমি আমার সংস্থা থেকে প্রক্সিটি কনফিগার করেছি।

npm install https-proxy-agent 
or 
npm install http-proxy-agent

const httpsProxyAgent = require('https-proxy-agent');
const agent = new httpsProxyAgent("http://yourorganzation.proxy.url:8080");
const options = {
  hostname: 'encrypted.google.com',
  port: 443,
  path: '/',
  method: 'GET',
  agent: agent
};

0

সংযোগের জন্য পাসওয়ার্ড থেকে অ-পছন্দসই অক্ষরগুলি সরিয়ে আমি এই সমস্যার সমাধান করেছি। উদাহরণস্বরূপ, আমার এই অক্ষরগুলি ছিল: <##% এবং এটি সমস্যার সৃষ্টি করেছে (সম্ভবত হ্যাশ ট্যাগই সমস্যার মূল কারণ ছিল)।


0

হোস্টনামের পরিবর্তে সার্ভারের আইপি ঠিকানা ব্যবহার করার চেষ্টা করুন। এটি আমার পক্ষে কাজ করেছে। আশা করি এটি আপনার পক্ষেও কাজ করবে।


0

আমার সমস্যাটি হ'ল আমরা url পার্স করছিলাম এবং http.request () এর জন্য http_options তৈরি করছিলাম;

আমি অনুরোধ_আরল.হোস্ট ব্যবহার করছিলাম যা ইতিমধ্যে ডোমেন নাম সহ পোর্ট নম্বর ছিল তাই অনুরোধ_url.hostname ব্যবহার করতে হবে।

var request_url = new URL('http://example.org:4444/path');
var http_options = {};

http_options['hostname'] = request_url.hostname;//We were using request_url.host which includes port number
http_options['port'] = request_url.port;
http_options['path'] = request_url.pathname;
http_options['method'] = 'POST';
http_options['timeout'] = 3000;
http_options['rejectUnauthorized'] = false;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.