我正在节点上运行一个 Web 服务器,其代码如下
var restify = require('restify');
var server = restify.createServer();
var quotes = [
{ author : 'Audrey Hepburn', text : "Nothing is impossible, the word itself says 'I'm possible'!"},
{ author : 'Walt Disney', text : "You may not realize it when it happens, but a kick in the teeth may be the best thing in the world for you"},
{ author : 'Unknown', text : "Even the greatest was once a beginner. Don't be afraid to take that first step."},
{ author : 'Neale Donald Walsch', text : "You are afraid to die, and you're afraid to live. What a way to exist."}
];
server.get('/', function(req, res) {
res.json(quotes);
});
server.get('/quote/random', function(req, res) {
var id = Math.floor(Math.random() * quotes.length);
var q = quotes[id];
res.json(q);
});
server.get('/quote/:id', function(req, res) {
if(quotes.length <= req.params.id || req.params.id < 0) {
res.statusCode = 404;
return res.send('Error 404: No quote found');
}
var q = quotes[req.params.id];
res.json(q);
});
server.listen(process.env.PORT || 3011);
然后我想在下面的代码中进行get请求
var https = require('http');
/**
* HOW TO Make an HTTP Call - GET
*/
// options for GET
var optionsget = {
host : 'http://localhost',
port : 3010,
path : '/quote/random', // 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);
});
我刚刚开始使用节点,我什至不知道这是否是正确的方法。 我想测试express和restify的性能。我对我编写的服务器代码做了一个apache基准测试,发现了矛盾的结果,restify更好。所以我想通过调用远程服务来测试更多,然后再测试读写 mongodb。上面的代码是我的起点。我收到错误
{ [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' }
我至少是朝着写作的方向前进吗?我想要进行的测试的正确方法是什么?为什么我得到结果 Restify 比 Express 更快?谁能指导我在 Node/express/backbone 和 mongodb 中应用的最佳起点教程?
getaddrinfo ENOTFOUND 表示客户端无法连接到给定地址。 请尝试指定不带 http 的主机:
var optionsget = {
host : 'localhost',
port : 3010,
path : '/quote/random', // the rest of the url with parameters if needed
method : 'GET' // do GET
};
关于学习资源,从http://www.nodebeginner.org/开始,然后通过一些好书来获得更深入的知识,不会出错 - 我推荐Professional Node.js ,但那里有很多。
检查主机文件是这样的
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
对我来说,这是因为 /etc/hosts 文件中未添加主机名
我无法解释原因,但在 Windows 10 上的
localhost
方法上将 url 参数从 127.0.0.1
更改为 mongodb.MongoClient.connect()
解决了问题。
我的问题是我的终点是
http://tenant1.localhost
。虽然这在浏览器中可以工作,但在节点上却不行。
我必须将以下行添加到
/etc/hosts
127.0.0.1 tenant1.localhost
我也遇到了同样的问题,我通过使用正确的代理修复了它。 如果您使用代理网络,请仔细检查您的代理设置。
希望这对您有帮助 -
我与亚马逊服务器有同样的问题,我将我的代码更改为这个
var connection = mysql.createConnection({
localAddress : '35.160.300.66',
user : 'root',
password : 'root',
database : 'rootdb',
});
检查mysql节点模块 https://github.com/mysqljs/mysql
var http = require('http');
var options = {
host: 'localhost',
port: 80,
path: '/broadcast'
};
var requestLoop = setInterval(function(){
http.get (options, function (resp) {
resp.on('data', function (d) {
console.log ('data!', d.toString());
});
resp.on('end', function (d) {
console.log ('Finished !');
});
}).on('error', function (e) {
console.log ('error:', e);
});
}, 10000);
var dns = require('dns'), cache = {};
dns._lookup = dns.lookup;
dns.lookup = function(domain, family, done) {
if (!done) {
done = family;
family = null;
}
var key = domain+family;
if (key in cache) {
var ip = cache[key],
ipv = ip.indexOf('.') !== -1 ? 4 : 6;
return process.nextTick(function() {
done(null, ip, ipv);
});
}
dns._lookup(domain, family, function(err, ip, ipv) {
if (err) return done(err);
cache[key] = ip;
done(null, ip, ipv);
});
};
// Works fine (100%)
当我尝试安装新的离子应用程序时,出现了如下相同的错误, 我尝试了很多来源,发现用户环境和系统环境中犯的错误不必要地包含了 PROXY 值。 我删除了```用户变量 http://主机:端口 代理
系统变量 http_代理 http://用户名:密码@主机:端口```` 现在它工作正常,没有任何问题。
[ERROR] Network connectivity error occurred, are you offline?
If you are behind a firewall and need to configure proxy settings, see: https://ion.link/cli-proxy-docs
Error: getaddrinfo ENOTFOUND host host:80
我遇到了类似的问题,结果发现问题出在我的代理密码上。
错误是:
“启动 npm npm ERR!代码 ENOTFOUND npm ERR!errno ENOTFOUND npm ERR! 网络请求https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz 失败,原因: getaddrinfo ENOTFOUND myUsername npm ERR!网络 这是 与网络连接相关的问题。 npm 错误!网络 在大多数 如果您使用代理或网络设置错误。 npm 错误! 网络 npm 错误!网络 如果您使用代理,请确保 npm 错误!网络“代理”配置设置正确。请参阅:'npm 帮助配置'
原来有趣的部分是这个:
失败,原因:getaddrinfo ENOTFOUND myUsername
我在代理中使用的密码包含特殊字符,例如!和 #。 使用百分比编码后:https://en.wikipedia.org/wiki/Percent-encoding我能够运行 npm install。在此之前,我尝试输入错误的密码并收到 407 错误。
我有 getaddrinfo ENOTFOUND localhost:3000 错误。无法连接到我的数据库。我的问题是我在一台 postgresql 数据库服务器中创建了 2 个不同的数据库。我的所有数据库服务器属性均已正确设置。例如: 主机:本地主机 端口:5432 用户名:我的用户名 密码:xxxxxx
仅当我在数据库服务器属性中检查“连接字符串”时,它才具有不同的数据库名称。这不是我所期望的。只需仔细检查数据库服务器属性中的“连接字符串”属性即可。
我遇到了同样的问题,经过一番尝试和错误后发现我的
hosts
文件自定义导致了问题。
我的
localhost
DNS 被覆盖,因此简单的 ping 失败:
$ ping http://localhost
# ping: cannot resolve http://localhost: Unknown host
一旦我解决了
/private/etc/hosts
文件的配置,ping localhost
就成功工作了,并且不再出现您所看到的错误:
# Fatal error: getaddrinfo ENOTFOUND