如何在 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]
允许我访问该字段。
我正在尝试检查 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]
允许我访问该字段。