Whiteflag API Error Handling
In addition to the standard Node.js JavaScript Error
class, two additional
classes are exposed by lib/common/errors.js
to handle processing and protocol
errors. The ProcessingError
class is to be used for processing errors,
i.e. operational errors that can and must be expected, such as dealing with
malformed data or bad client requests. The ProtocolError
class is for the
handling of Whiteflag message format and protocol errors.
Usage of error classes
The best way to define one or both Whiteflag API error classes within a specific module, is to require the errors module and use an object destructor as follows:
const { ProcessingError, ProtocolError } = require('./common/errors.js');
Both classes use a similar constructor:
err = new ProcessingError(message, causes, code);
err = new ProtocolError(message, causes, code);
with the folloing arguments:
message
is similar to the property of the generic Error class, i.e. a string with a human readable description of the errorcauses
is an additional property in the form of an array that may contain a human readable stack of underlying causescode
is a property of type string, identifying the type of error as described below for both classes
ProcessingError
class error codes
WF_API_PROCESSING_ERROR
: generic processing error (default)WF_API_BAD_REQUEST
: the request was incomplete or incorrect syntaxWF_API_NOT_ALLOWED
: the request is not allowedWF_API_NO_DATA
: the request did not return any (valid) dataWF_API_NO_RESOURCE
: could not processess because resource does not existWF_API_RESOURCE_CONFLICT
: could not process because resource alreasy existsWF_API_NOT_IMPLEMENTED
: the function is not supportedWF_API_NOT_AVAILABLE
: the function is currently not available
ProtocolError
class error codes
WF_PROTOCOL_ERROR
: generic Whiteflag protocol error (default)WF_METAHEADER_ERROR
: incorrect Whiteflag message metaheaderWF_FORMAT_ERROR
: Whiteflag message format errorWF_REFERENCE_ERROR
: Whiteflag message reference errorWF_AUTH_ERROR
: Whiteflag message authentication errorWF_SIGN_ERROR
: Whiteflag signature errorWF_ENCRYPTION_ERROR
: Whiteflag encryption error
Guideline for errors, logging and responses
The following table is a guideline on how error codes, log levels and http response codes generally correspond if used in combination.
Error Class | Error Code | Loglevel | HTTP Status Code |
---|---|---|---|
Error |
WF_API_INTERNAL_ERROR |
level 2: error |
500 |
WF_API_MIDDLEWARE_ERROR |
level 5: debug |
(any) | |
ProcessingError |
WF_API_PROCESSING_ERROR |
level 2: error |
400 |
WF_API_BAD_REQUEST |
level 5: debug |
400 | |
WF_API_NOT_ALLOWED |
level 5: debug |
403 | |
WF_API_NO_DATA |
level 5: debug |
404 | |
WF_API_NO_RESOURCE |
level 5: debug |
404 | |
WF_API_RESOURCE_CONFLICT |
level 5: debug |
409 | |
WF_API_NOT_IMPLEMENTED |
level 5: debug |
501 | |
WF_API_NOT_AVAILABLE |
level 3: warn |
503 | |
ProtocolError |
WF_PROTOCOL_ERROR |
level 5: debug |
400 |
WF_METAHEADER_ERROR |
level 5: debug |
400 | |
WF_FORMAT_ERROR |
level 5: debug |
400 | |
WF_REFERENCE_ERROR |
level 5: debug |
400 | |
WF_AUTH_ERROR |
level 5: debug |
400 | |
WF_SIGN_ERROR |
level 5: debug |
400 | |
WF_ENCRYPTION_ERROR |
level 5: debug |
400 |