我正在尝试检查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')],但这是未定义的。我想这可能与键周围的方括号有关?
如何访问此字段?
我们正在使用feathers-knex与我们的MySQL数据库进行接口。根据他们的docs,
从4.0.0版本开始,feathers-knex仅在消息中引发Feathers错误。在服务器上,可以通过错误[require('feathers-knex')。ERROR]
通过安全符号检索原始错误。
所以打电话给context.error[require('feathers-knex').ERROR]
使我可以访问该字段。