- Node.js的0.10.26
- OS X 10.9.2(也Ubuntu的流浪漢盒)
在我的系統上的兩個不同的模塊,當我運行使用摩卡測試,我得到這個錯誤:的getaddrinfo無法使用時,摩卡在hosts文件來解析地址
{ [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);
打印出(I think)函數的返回值。不幸的是,我看到的返回值是一些大數字,而不是0
或-1
like it should be。
因此,有可能出錯了我的DTrace腳本,但是這並不能說明我更大的問題:
爲什麼主機data-proxy
沒有當我的hosts文件包含127.0.0.1 data-proxy
解決?爲什麼這隻發生在我正在運行摩卡測試時,而不是當我運行我的服務並手動點擊它們時?
如果您想查看獲取錯誤的相關node.js代碼,請隨時查看mongodb和請求,因爲我的用法看起來像他們的示例。
它看起來可能是因爲忘記關閉某個文件句柄。 檢查出:https://github.com/mikeal/request/issues/699 – Daniel