我如何在feathersjs HookContext.error中访问此“隐藏”对象密钥?

问题描述 投票:0回答:1

我正在尝试检查feathersjs何时引发包含有关DB数据的错误,因此我可以防止它出现在客户端上。我已经发现,在以HookContext作为arg的自定义错误处理函数中,当错误与数据库相关时,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')],但这是未定义的。我想这可能与键周围的方括号有关?

如何访问此字段?

javascript mysql typescript object feathersjs
1个回答
2
投票

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

从4.0.0版本开始,feathers-knex仅在消息中引发Feathers错误。在服务器上,可以通过错误[require('feathers-knex')。ERROR]

通过安全符号检索原始错误。

所以打电话给context.error[require('feathers-knex').ERROR]使我可以访问该字段。

© www.soinside.com 2019 - 2024. All rights reserved.