[英]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
對。 如果value
在key:value
是一個字符串,那么就應該用單引號或雙引號。
{記錄:{錯誤:SQLITE_ERROR:否這樣的表:showantUsers errno:1,代碼:'SQLITE_ERROR'}}
在沒有適當value
的情況下(您的value
數據類型為String
), JSON.stringify(err)
嘗試基於冒號將其強制轉換為JSON :
作為key
和value
之間的分隔符。 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.