簡體   English   中英

JavaScript錯誤未顯示在控制台中?

[英]JavaScript errors not showing up in console?

在以下代碼剪切中未定義fields ,但在發生錯誤時不會將其記錄到控制台。 在這個具體的例子中,為什么以及實際處理這個問題的方法是什么?

"Testing"被記錄到控制台(第2行),但未報告未定義的變量fields (第4行)。 錯誤在API響應(第5行)中返回,但沒有相關信息,如行#,堆棧跟蹤等。

如何將此日志中的錯誤發送到控制台,為什么不是?

export function post(req, res) {
  console.log("Testing")
  User.create( getFields(req, ["name_first", "name_last"]) )
    .then(user =>  respondJSON (res, fields, { status: 201 }))
    .catch(err => respondError (res, err))
}

由於catch響應錯誤,我得到以下API響應:

{
  "error": true,
  "data": {
    "message": "fields is not defined"
  }
}

我正在使用Babel 6和babel-node通過NPM腳本運行我的代碼。 我也在使用摩根伐木。 刪除用於記錄的中間件不會改變錯誤輸出。

自動記錄到控制台是一種未處理異常的機制。 因為Promises會自動捕獲回調中的異常,所以異常不再處理,因此不會自動記錄任何內容。

如果你想記錄它,你可以在catch塊的末尾添加一個throw err 這會將其轉換為未處理的promise拒絕,通常與未處理的異常類似地處理。

因為你沒有真正記錄錯誤?

export function post(req, res) {
  console.log("Testing")
  User.create( getFields(req, ["name_first", "name_last"]) )
    .then(user =>  respondJSON (res, fields, { status: 201 }))
    .catch(err => {
      console.error(err);
      respondError(res, err);
    });
}

我有一個類似的問題是由'finally'引起的,它附加在運行的主異步函數上。

run()
.finally(()=>{process.exit(0)})

將其修改為:

run()
.catch(err => {console.log(err)})
.finally(()=>{process.exit(0)})

解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM