- Node.js 0.10.26
- OS X 10.9.2(也在 ubuntu vagrant box 上)
在我系统上的两个不同模块中,当我使用 mocha 运行测试时,我收到此错误:
{ [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' }
这通常意味着我试图解析一个不存在的主机。我尝试使用带有此脚本的 dtrace 来发现问题(我发现并稍作修改):
#!/usr/sbin/dtrace -s
#pragma D option quiet
dtrace:::BEGIN
{
printf("%-20s %-12s %s\n", "TIME", "LATENCY(ms)", "HOST");
}
pid$target::getaddrinfo:entry
{
self->host = copyinstr(arg0);
self->start = timestamp;
}
pid$target::getaddrinfo:return
/self->start/
{
printf("%d", arg1);
this->delta = (timestamp - self->start) / 1000000;
printf("%-20Y %-12d %s\n", walltimestamp, this->delta, self->host);
self->host = 0;
self->start = 0;
}
使用它,我可以看到我的测试命中的每个主机要么在我的主机文件中,要么是我的主机名。printf("%d", arg1);
打印出(我认为)函数的返回值。不幸的是,我看到的返回值是一个很大的数字,而不是0
或者-1
应该是。
所以我的 dtrace 脚本可能有问题,但这并不能解释我更大的问题:
data-proxy
当我的 hosts 文件包含时,为什么没有解析主机127.0.0.1 data-proxy
?为什么这只会发生在我使用 mocha 运行测试时而不是当我运行我的服务并手动点击它们时?
如果您想查看得到错误的相关 node.js 代码,请随时检查 mongodb 和 request,因为我的用法看起来像他们的示例。