簡體   English   中英

如何從僅出現在console.log()中而不出現在JSON.stringify()中的JavaScript對象中獲取屬性?

[英]How to get property out of JavaScript object which is only appearing in console.log() but not in JSON.stringify()?

我從SQLite數據庫中得到了一個錯誤對象。 當我用console.log(err)顯示它時,我得到:

{記錄:{錯誤:SQLITE_ERROR:否這樣的表:showantUsers errno:1,代碼:'SQLITE_ERROR'}}

但是,當我使用JSON.stringify(err)顯示它時,我只會得到:

{“ records”:{“ errno”:1,“ code”:“ SQLITE_ERROR”}}

我想得到錯誤消息, no such table: showcaseUsers字符串中的no such table: showcaseUsers

我發現如何執行此操作的唯一方法是:

const errorText = console.log(data);

但這也將數據輸出到控制台,這是不希望的。

我如何(1)阻止console.log將其內容輸出到控制台,或者(2)以其他方式獲得字符串錯誤消息?

注意:我目前在Node中,而不是在瀏覽器中,因此,似乎沒有在捕獲javascript console.log上找到答案 是有幫助的。

根本不需要攔截console -您將在err.message找到整個錯誤消息,盡管仍然以“ SQLITE_ERROR: ”為前綴

這是Error對象的不可枚舉的屬性,因此為什么它不出現在JSON輸出中:

let sqlite3 = require('sqlite3');

let db = new sqlite3.Database(':memory:');
db.run("UPDATE foo SET bar = 1", (err, res) => {
  console.log(Object.getOwnPropertyDescriptors(err));
  console.log(err.message);
});

輸出:

{ stack:
   { value: 'Error: SQLITE_ERROR: no such table: foo',
     writable: true,
     enumerable: false,
     configurable: true },
  message:
   { value: 'SQLITE_ERROR: no such table: foo',
     writable: true,
     enumerable: false,        <<---------
     configurable: true },
  errno:
   { value: 1, writable: true, enumerable: true, configurable: true },
  code:
   { value: 'SQLITE_ERROR',
     writable: true,
     enumerable: true,
     configurable: true } }
SQLITE_ERROR: no such table: foo

問題是格式錯誤的JSON,它必須是key:value對。 如果valuekey:value是一個字符串,那么就應該用單引號或雙引號。

{記錄:{錯誤:SQLITE_ERROR:否這樣的表:showantUsers errno:1,代碼:'SQLITE_ERROR'}}

在沒有適當value的情況下(您的value數據類型為String ), JSON.stringify(err)嘗試基於冒號將其強制轉換為JSON :作為keyvalue之間的分隔符。 JavaScript中的可用數據類型

這是一個更正,我將其括在雙引號中並對其進行了格式化(格式化是可選的,有助於提高可讀性)。

{ 
    records: { 
        Error: "SQLITE_ERROR: no such table: showcaseUsers errno: 1, code: 'SQLITE_ERROR'" 
    } 
}

實際上,它應該像這樣格式化(請參閱單引號的放置)

{ 
    records: { 
        Error: 'SQLITE_ERROR: no such table: showcaseUsers',
        errno: 1, 
        code: 'SQLITE_ERROR'
    } 
}

更新:首先必須將格式正確的數據存儲在數據庫中。 如果您錯過了它,那么您將不得不手動解析從SQLite獲取的數據。

有用的資源

暫無
暫無

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

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