Moleculer has some built-in Error to raise an error in services.
Base error classes
MoleculerError
The base error class.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
message |
String |
Error message | |
code |
Number |
500 |
Error code |
type |
String |
Error type | |
data |
any |
Any relevant data |
Example
const { MoleculerError } = require("moleculer").Errors; |
MoleculerRetryableError
Error for retryable errors. It uses in broker.call. The broker retries requests if they rejected a MoleculerRetryableError.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
message |
String |
Error message | |
code |
Number |
500 |
Error code |
type |
String |
Error type | |
data |
any |
Any relevant data |
Example
const { MoleculerRetryableError } = require("moleculer").Errors; |
MoleculerServerError
Error for retryable server errors. Parameters are same as MoleculerRetryableError.
MoleculerClientError
Error for client error which is not retryable. Parameters are same as MoleculerError.
Internal error classes
ServiceNotFoundError
Throw it if you call a not registered service action.
Error code: 404
Retryable: true
Type: SERVICE_NOT_FOUND
ServiceNotAvailableError
Throw it if you call a currently unavailable service action. E.g. node disconnected which contains this service or circuit breaker is opened.
Error code: 404
Retryable: true
Type: SERVICE_NOT_AVAILABLE
RequestTimeoutError
Throw it if your request is timed out.
Error code: 504
Retryable: true
Type: REQUEST_TIMEOUT
RequestSkippedError
Throw it if your nested call is skipped because the execution is timed out due to distributed timeout.
Error code: 514
Retryable: false
Type: REQUEST_SKIPPED
RequestRejectedError
Throw it if the called node is disconnected during requesting.
Error code: 503
Retryable: true
Type: REQUEST_REJECTED
QueueIsFullError
Throw it if there are too many active requests.
Error code: 429
Retryable: true
Type: QUEUE_FULL
ValidationError
Validator throws it if the calling parameters are not valid.
Error code: 422
Retryable: false
Type: VALIDATION_ERROR (default)
MaxCallLevelError
Throw it if your nested calls reached the maxCallLevel value (to avoid infinite calling loops).
Error code: 500
Retryable: false
Type: MAX_CALL_LEVEL
ServiceSchemaError
Throw it if your service schema is not valid.
Error code: 500
Retryable: false
Type: SERVICE_SCHEMA_ERROR
BrokerOptionsError
Throw it if your broker options are not valid.
Error code: 500
Retryable: false
Type: BROKER_OPTIONS_ERROR
GracefulStopTimeoutError
Throw it if shutdown is timed out.
Error code: 500
Retryable: false
Type: GRACEFUL_STOP_TIMEOUT
ProtocolVersionMismatchError
Throw it if an old nodeID connected with older protocol version.
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
Create custom errors
The following example shows how to create a custom Error class which is inherited from 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 | Description |
|---|---|---|
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 |