UNPKG

@contentacms/contentajs

Version:

A nodejs server that proxies to Contenta CMS and holds custom code.

52 lines (42 loc) 1.25 kB
"use strict"; const _ = require('lodash'); const config = require('config'); const logger = require('pino')(); module.exports = (err, req, res, next) => { const errors = Array.isArray(err) ? err : [err]; res.set('Cache-Control', 'private, max-age=0, no-cache'); res.status(errors[0].status || 500); const errorObjects = _.map(errors, error => { let eObject = { status: 500, code: 'InternalServerError', title: 'Internal server error.' }; if (error.status) { if (req.timedout) { res.set('Retry-After', config.get('timeout.retryAfter')); error.message = `Response time exceeded ${error.timeout / 1000} second(s).`; } eObject = _.merge(eObject, _.pick(error, ['status', 'links', 'detail', 'source', 'meta'])); eObject.code = error.name; eObject.title = error.message; } // These are unexpected, non HTTP errors. else { eObject.detail = `${error.name}: ${error.message}`; } // Log in detail. logger.error({ request: { url: req.url, body: req.body }, error: { code: err.status, stack: err.stack } }); return eObject; }); res.json({ errors: errorObjects }); };