5.0 KiB
strong-error-handler
Error handler for use in development (debug) and production environments.
Production mode
- error responses are purposely left without detail in order to prevent leaking sensitive information.
- For 5xx errors, the output contains only the status code and the status name from the HTTP specification.
- For 4xx errors, the output contains the full error message (
error.message
) and the contents of thedetails
property (error.details
). The latter is typically used byValidationError
to provide machine-readable details about the validation problems.
Debug Mode
- Full error stack traces and internal details of any object passed as the error will be sent back to the client in the HTTP responses when an error occurs.
Response Format
strong-error-handler
currently supports HTML and JSON responses.- When the object is a standard Error object, the string provided by the stack property will be returned in HTML/text responses.
- When the object is a non-Error object, the result of
util.inspect
will be returned in HTML/text responses. - For JSON responses, the result will be an object with all enumerable properties from the object in the response.
Install
$ npm install strong-error-handler
Usage
In an express-based application:
var express = require('express');
var errorHandler = require('strong-error-handler');
var app = express();
// setup your routes
// `options` are set to default values. For more info, see `options` below.
// app.use(errorHandler({ /* options, see below */ }));
app.use(errorHandler({
debug: app.get('env') === 'development',
log: true,
}));
app.listen(3000);
In LoopBack applications, add the following entry to your
server/middleware.json
file.
{
"final:after": {
"strong-error-handler": {
"params": {
"debug": false,
"log": true,
}
}
}
}
Content Type
Depending on the request header's Accepts
, response will be returned in
the corresponding content-type, current supported types include:
- JSON (
json
/application/json
) - HTML (
html
/text/html
)
There are plans to support other formats such as Text and XML.
Options
debug
boolean
, defaults to false
.
If you need to set the environment to development mode, you will need to change the value to true
.
When enabled, HTTP responses include all error properties, including sensitive data such as file paths, URLs and stack traces. See Examples below
log
boolean
, defaults to true
.
When enabled, all errors are printed via console.error
. That includes an array of fields (custom error properties)
that are safe to include in response messages (both 4xx and 5xx).
When not enabled, it only sends the error back in the response.
Customization of the log format is intentionally not allowed. If you would like to use a different format/logger, disable this option and add your own custom error-handling middleware.
app.use(myErrorLogger());
app.use(errorHandler({ log: false }));
Migration to strong-error-handler for existing LoopBack applications
- In package.json dependencies, remove
"errorhandler": "^x.x.x”,
- Run
npm install --save strong-error-handler
- In
./server/config.json
, remove:
"errorHandler": {
"disableStackTrace": false
}
and replace it with "handleErrors": false
.
- In
server/middleware.json
, remove
"final:after": {
"loopback#errorHandler": {}
}
and replace it with:
"final:after": {
"strong-error-handler": {}
}
- In the
./server
, deletemiddleware.production.json
. - In the
./server
, createmiddleware.development.json
containing:
{
"final:after": {
"strong-error-handler": {
"params": {
"debug": true,
"log": true
}
}
}
}
Examples:
Error generated when debug: false
:
{ error: { statusCode: 500, message: 'Internal Server Error' } }
Error generated when debug: true
:
{ error:
{ statusCode: 500,
name: 'Error',
message: 'a test error message',
stack: 'Error: a test error message\n at Context.<anonymous> (User/strong-error-handler/test/handler.test.js:220:21)\n at callFnAsync (User/strong-error-handler/node_modules/mocha/lib/runnable.js:349:8)\n at Test.Runnable.run (User/strong-error-handler/node_modules/mocha/lib/runnable.js:301:7)\n at Runner.runTest (User/strong-error-handler/node_modules/mocha/lib/runner.js:422:10)\n at User/strong-error-handler/node_modules/mocha/lib/runner.js:528:12\n at next (User/strong-error-handler/node_modules/mocha/lib/runner.js:342:14)\n at User/strong-error-handler/node_modules/mocha/lib/runner.js:352:7\n at next (User/strong-error-handler/node_modules/mocha/lib/runner.js:284:14)\n at Immediate._onImmediate (User/strong-error-handler/node_modules/mocha/lib/runner.js:320:5)\n at tryOnImmediate (timers.js:543:15)\n at processImmediate [as _immediateCallback] (timers.js:523:5)' }}