Как я могу получить доступ к этому ключу "скрытого" объекта в перьях js HookContext.error? - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь проверить, когда перья js выдают ошибку, содержащую данные о БД, чтобы я мог предотвратить ее отображение на стороне клиента. Я понял, что в пользовательской функции обработчика ошибок, которая принимает 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 ('перья-knex / error')], но это оказалось неопределенным. Я полагаю, это может иметь какое-то отношение к квадратным скобкам вокруг ключа?

Как мне получить доступ к этому полю?

1 Ответ

2 голосов
/ 07 мая 2020

Мы используем перышки-knex для взаимодействия с нашей MySQL базой данных. Согласно их docs ,

Начиная с версии 4.0.0 перья-knex выдают только ошибки Feathers с сообщением. На сервере исходную ошибку можно получить с помощью защищенного символа с помощью error [require ('перья-knex'). ERROR]

Таким образом, вызов context.error[require('feathers-knex').ERROR] позволил мне получить доступ к полю.

...