2015-09-29 46 views
3

我感到相當的Node.js Error對象不解,登錄到控制檯...
作爲例子的時候,我有這樣的代碼:Node.js:如何檢查錯誤?

request(
    options, 
    function (err, response, contents) { 
    if (err) { 
     console.error('error in request:', err); 
    } 
    success(contents); 
    }, 
); 

有時錯誤出一個ECONNRESET錯誤...所以非常好。
console.error()(或console.log())格式是這樣的:

[Error: socket hang up] code: 'ECONNRESET' 

我無法理解打印格式:爲什麼「錯誤:插座掛斷」是方括號中?它是一個對象嗎? 適用於所有人:如何檢查錯誤對象,以便我可以看到所有單個屬性?

UPDATE:@chriskelly答案,在調試模式下運行的節點後,我得到:

debug> repl 
Press Ctrl + C to leave debug repl 
> typeof err 
'object' 
> Object.keys(err) 
[] 
> console.dir(err) 
< [Error: socket hang up] code: 'ECONNRESET' 

我一直不理解err對象:沒有按鍵,而是擁有內容... :-(

回答

2

通過請求返回的錯誤類型是Error對象: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error

其中一個屬性是一個名爲properties的數組,第二個條目包含您在方括號中看到的文本。 Java腳本能夠指定不同程度的visbility和一些自定義對象,如錯誤具有這些屬性設置:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties

嘗試運行節點與debug開關和使用debugger關鍵字來創建斷點。即修改代碼如下:

if (err) { 
    console.error(err) 
    debugger; 
} 

然後運行節點如下:

node debug server.js 
  1. 節點將打破在第一行這樣類型的「C」繼續。
  2. 當它停在上面的行,鍵入repl(代表讀,EVAL,打印循環)檢查變量 例如鍵入

    Object.keys(err) 檢查err的屬性(假設它是一個對象)。

據透露,爲圖形替代你可以嘗試節點檢查您可以安裝帶有:

npm install -g node-inspector 

然後用

node-debug server.js 

你的代碼運行將打開在Chrome中爲您提供在前端調試期間可用的相同工具。

HTH。

+0

謝謝...但我還是不明白Err對象...查看更新OQ – MarcoS

+0

奇怪。你使用什麼版本的節點?我只是試圖複製和請求給我一個錯誤,其中有關鍵[code,errno,syscall,address,port] – chriskelly

+0

v0.10.40 ...... – MarcoS

1

您也可以使用:

console.dir(err); 

https://developer.mozilla.org/en-US/docs/Web/API/Console/dir

UPDATE:

這是一個關於Error對象DOC:

https://nodejs.org/api/errors.html

在方括號內錯誤顯示類型和消息。 類型是錯誤類,而message - 傳遞給錯誤構造函數的參數。

var e = new TypeError("Bla Bla Bla"); 
console.log(e); 

給出:[TypeError: Bla Bla Bla]

+0

謝謝,很好的信息。雖然在這種情況下,我得到了相同的輸出... – MarcoS