当使用Node.js尝试获取以下网页的html内容时:
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)
我已经在stackoverflow上查找了这个错误,并意识到这是因为node.js无法从DNS中找到服务器(我认为)。然而,我不确定为什么会这样,因为我的代码在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);
});
});
这是我复制和粘贴的源代码:如何在Expressjs中进行web服务调用?
我没有使用node.js的任何模块。
感谢阅读。
在Node.js HTTP模块的文档中:http://nodejs.org/api/http.html#http_http_request_options_callback
你可以调用http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary',回调),然后URL会被URL .parse()解析;或者调用http。Get (options, callback),其中options是
{
host: 'eternagame.wikia.com',
port: 8080,
path: '/wiki/EteRNA_Dictionary'
}
更新
正如在@EnchanterIO的评论中所述,端口字段也是一个单独的选项;协议http://不应该包含在host字段中。其他答案也建议使用https模块,如果需要SSL。
在Node.js HTTP模块的文档中:http://nodejs.org/api/http.html#http_http_request_options_callback
你可以调用http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary',回调),然后URL会被URL .parse()解析;或者调用http。Get (options, callback),其中options是
{
host: 'eternagame.wikia.com',
port: 8080,
path: '/wiki/EteRNA_Dictionary'
}
更新
正如在@EnchanterIO的评论中所述,端口字段也是一个单独的选项;协议http://不应该包含在host字段中。其他答案也建议使用https模块,如果需要SSL。
我认为http在端口80上发出请求,即使我在options对象中提到了完整的主机url。当我在端口80上运行具有API的服务器应用程序时,我之前在端口3000上运行它,它工作了。注意,要在端口80上运行应用程序,您需要root权限。
请求错误: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();