如何在 feathersjs HookContext.error 中访问此 "hidden" 对象键?

How can I access this "hidden" object key in a feathersjs HookContext.error?

我正在尝试检查 feathersjs 何时抛出包含有关数据库的数据的错误,以便我可以防止它显示在客户端。我发现在自定义错误处理函数中,当错误与数据库相关时,该函数将 HookContext 作为参数,context.error 对象包含一个附加字段,表示为 [Symbol(feathers-knex/error)].

这是 console.log(context.error) 的样子:

{
  type: 'FeathersError',
  name: 'BadRequest',
  message: "insert into `users` (`created_by_uid`, `id`) values (DEFAULT, NaN) - Unknown column 'NaN' in 'field list'",
  code: 400,
  className: 'bad-request',
  data: undefined,
  errors: {},
  hook: null,
  [Symbol(feathers-knex/error)]: Error: Unknown column 'NaN' in 'field list'
      at Packet.asError (/Users/matthewwolfe/vretta/mpt-api/node_modules/mysql2/lib/packets/packet.js:708:17)
      at Query.execute (/Users/matthewwolfe/vretta/mpt-api/node_modules/mysql2/lib/commands/command.js:28:26)
      at Connection.handlePacket (/Users/matthewwolfe/vretta/mpt-api/node_modules/mysql2/lib/connection.js:408:32)
      at PacketParser.onPacket (/Users/matthewwolfe/vretta/mpt-api/node_modules/mysql2/lib/connection.js:70:12)
      at PacketParser.executeStart (/Users/matthewwolfe/vretta/mpt-api/node_modules/mysql2/lib/packet_parser.js:75:16)
      at TLSSocket.<anonymous> (/Users/matthewwolfe/vretta/mpt-api/node_modules/mysql2/lib/connection.js:328:25)
      at TLSSocket.emit (events.js:305:20)
      at TLSSocket.EventEmitter.emit (domain.js:483:12)
      at addChunk (_stream_readable.js:341:12)
      at readableAddChunk (_stream_readable.js:316:11)
      at TLSSocket.Readable.push (_stream_readable.js:250:10)
      at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23) {
    code: 'ER_BAD_FIELD_ERROR',
    errno: 1054,
    sqlState: '42S22',
    sqlMessage: "Unknown column 'NaN' in 'field list'"
  }
}

我遇到的问题是尝试访问此字段。 当我调用 Object.keys(context.error) 时,我正在寻找的其他字段没有出现。 只显示 8 个键,在我要找的上面。

我试过 context.error[Symbol('feathers-knex/error')] 但结果是未定义的。我想这可能与键周围的方括号有关?

如何访问该字段?

我们正在使用 feathers-knex 与我们的 MySQL 数据库进行交互。根据他们的 docs

As of version 4.0.0 feathers-knex only throws Feathers Errors with the message. On the server, the original error can be retrieved through a secure symbol via error[require('feathers-knex').ERROR]

所以调用 context.error[require('feathers-knex').ERROR] 允许我访问该字段。