Moleculer предоставляет несколько классов Error, для вызова в сервисах.
Базовые классы ошибок
MoleculerError
Базовый класс ошибки.
Параметры
| Название | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
message |
String |
Сообщение об ошибке | |
code |
Number |
500 |
Код ошибки |
type |
String |
Тип ошибки | |
data |
any |
Любые соответствующие данные |
Пример
const { MoleculerError } = require("moleculer").Errors; |
MoleculerRetryableError
Ошибка для повторных ошибок. Используется в broker.call. Брокер повторяет запрос, если запрос не удался и вернул ошибку MoleculerRetryableError.
Параметры
| Название | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
message |
String |
Сообщение об ошибке | |
code |
Number |
500 |
Код ошибки |
type |
String |
Тип ошибки | |
data |
any |
Любые соответствующие данные |
Пример
const { MoleculerRetryableError } = require("moleculer").Errors; |
MoleculerServerError
Ошибка для повторных серверных ошибок. Параметры такие же, как для MoleculerRetryableError.
MoleculerClientError
Клиентская ошибка, при получении которой не будет выполнен повторный запрос. Параметры такие же, как для MoleculerError.
Классы внутренних ошибок
ServiceNotFoundError
Бросьте эту ошибку, если происходит вызов call не зарегистрированного служебного действия. Error code: 404 Retryable: true Type: SERVICE_NOT_FOUND
ServiceNotAvailableError
Бросьте эту ошибку, если происходит вызов call недоступного в момент вызова действия сервиса. Например, узел, который содержит данный сервис отключён или открыт прерыватель бесконечных циклов. Error code: 404 Retryable: true Type: SERVICE_NOT_AVAILABLE
RequestTimeoutError
Бросьте эту ошибку, если время вашего запроса истекло. Error code: 504 Retryable: true Type: REQUEST_TIMEOUT
RequestSkippedError
Бросьте эту ошибку, если вложенный вызов пропущен, потому что его выполнение истекает по причине наступления распределенного тайм-аута. Error code: 514 Retryable: false Type: REQUEST_SKIPPED
RequestRejectedError
Бросьте эту ошибку, если вызываемый узел отключен во время запроса. Error code: 503 Retryable: true Type: REQUEST_REJECTED
QueueIsFullError
Бросьте эту ошибку, если слишком много активных запросов. Error code: 429 Retryable: true Type: QUEUE_FULL
ValidationError
Валидатор бросает эту ошибку, если вызывающие параметры недействительны. Error code: 422 Retryable: false Type: VALIDATION_ERROR (по умолчанию)
MaxCallLevelError
Бросьте эту ошибку, если вложенные вызовы достигли значения maxCallLevel (чтобы избежать бесконечных циклов вызовов). Error code: 500 Retryable: false Type: MAX_CALL_LEVEL
ServiceSchemaError
Бросьте эту ошибку, если ваша схема сервиса невалидна. Error code: 500 Retryable: false Type: SERVICE_SCHEMA_ERROR
BrokerOptionsError
Бросьте эту ошибку, если параметры вашего брокера невалидные. Error code: 500 Retryable: false Type: BROKER_OPTIONS_ERROR
GracefulStopTimeoutError
Бросьте эту ошибку, если время плавного выключения истекло. Error code: 500 Retryable: false Type: GRACEFUL_STOP_TIMEOUT
ProtocolVersionMismatchError
Бросьте эту ошибку, если старый идентификатор узла подключен к более старшей версии протокола. Error code: 500 Retryable: false Type: PROTOCOL_VERSION_MISMATCH
InvalidPacketDataError
Throw it if transporter receives unknown data. Error code: 500 Retryable: false Type: INVALID_PACKET_DATA
Создание пользовательских ошибок
Следующий пример показывает, как создать пользовательский класс Error, который унаследован от MoleculerError.
const { MoleculerError } = require("moleculer").Errors; |
Preserve custom error classes while transferring between remote nodes
For this purpose provide your own Regenerator. We recommend looking at the source code of Errors.Regenerator and implementing restore, extractPlainError or restoreCustomError methods.
Public interface of Regenerator
| Method | Return | Описание |
|---|---|---|
restore(plainError, payload) |
Error |
Restores an Error object |
extractPlainError(err) |
Object |
Extracts a plain error object from Error object |
restoreCustomError(plainError, payload) |
Error or undefined |
Hook to restore a custom error in a child class. Prefer to use this method instead of the restore method. |
Create custom regenerator
const { Regenerator, MoleculerError } = require("moleculer").Errors; |
Use custom regenerator
// moleculer.config.js |