Я получаю объект ошибки из моей базы данных SQLite. Когда я отображаю его с console.log(err)
, я получаю:
{records: {Ошибка: SQLITE_ERROR: такой таблицы нет: showcaseUsers errno: 1, код: 'SQLITE_ERROR'}}
Тем не менее, когда я отображаю его с помощью JSON.stringify(err)
, я получаю только:
{ "записи": { "ERRNO": 1, "код": "SQLITE_ERROR"}}
Я хочу получить сообщение об ошибке no such table: showcaseUsers
в строке.
Единственный способ, которым я нашел, как это сделать, это:
const errorText = console.log(data);
Но это также выводит данные на консоль, что нежелательно.
Как я могу (1) остановить console.log от вывода его содержимого на консоль или иначе (2) получить сообщение об ошибке в строке другим способом?
ПРИМЕЧАНИЕ. На данный момент я нахожусь в Node, а не в браузере, так что не похоже, что ответ в Capturing javascript console.log? полезно
Нет необходимости перехватывать console
вообще - вы найдете все сообщение об ошибке в err.message
, хотя префикс " SQLITE_ERROR:
" по-прежнему префикс 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
Если это возможно, вы можете попытаться перехватить console.log
следующим образом:
if(window.console){
console.yo = console.log;
console.log = function(str){ // notice that you can use str for further use
// console.yo('Welcome!!'); // just comment out if you don't need the console
document.getElementById('console').innerHTML=str; // notice that you can use str for further use
}
}
console.log('Error!! My stomach is empty!!');
<span id="console"></span>
Проблема в неправильном формате JSON, который должен быть парами key:value
. Если value
в key:value
является строкой, то оно должно быть заключено в одинарные или двойные кавычки.
{records: {Ошибка: SQLITE_ERROR: такой таблицы нет: showcaseUsers 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.
Полезные ресурсы
const errorText=data;