代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

如何从只出现在console.log()中而不出现在JSON.stringify()中的JavaScript对象中获取属性?

  •  1
  • Edward Tanguay  · 技术社区  · 6 年前

    console.log(err) ,我得到:

    {记录:{错误:SQLITE_错误:无此类表:showcaseUsers错误号:

    但当我用 JSON.stringify(err)

    {“记录”:{“errno”:1,“代码”:“SQLITE_ERROR”}

    我想得到错误信息 no such table: showcaseUsers

    我找到的唯一方法是:

    const errorText = console.log(data);
    

    但这也会将数据输出到控制台,这是不可取的。

    如何(1)停止console.log将其内容输出到控制台,或者(2)以其他方式获取字符串形式的错误消息?

    Capturing javascript console.log? 这很有帮助。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Alnitak    6 年前

    没有必要拦截这条线路 console err.message ,尽管前缀仍然为“ SQLITE_ERROR: "

    它是的不可枚举属性 Error

    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
    
        2
  •  -2
  •   Hamza Rashid    6 年前

    key:value 对。如果 value 在里面 是字符串,则应将其括在单引号或双引号中。

    价值 在您的案例中,有数据类型 String ), JSON.stringify(err) : 分隔 key 价值 Available datatypes in 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获取的数据。

    有用的资源