UNPKG

@openveo/core

Version:
128 lines (112 loc) 3.61 kB
'use strict'; /** * @module core/controllers/ErrorController */ var util = require('util'); var openVeoApi = require('@openveo/api'); var errors = process.require('app/server/httpErrors.js'); var DefaultController = process.require('app/server/controllers/DefaultController.js'); var Controller = openVeoApi.controllers.Controller; var defaultController = new DefaultController(); /** * Defines a controller to handle errors. * * @class ErrorController * @extends Controller */ function ErrorController() { ErrorController.super_.call(this); } module.exports = ErrorController; util.inherits(ErrorController, Controller); /** * Handles requests which does not correspond to anything. * * @param {Request} request ExpressJS HTTP Request * @param {Response} response ExpressJS HTTP Response * @param {Function} next Function to defer execution to the next registered middleware */ ErrorController.prototype.notFoundAction = function(request, response, next) { next(errors.PATH_NOT_FOUND); }; /** * Handles all errors. * * @param {Object} error An error object * @param {Number} error.httCode The code HTTP to return for this error * @param {Number} error.message The message with the error * @param {Number} [error.code=UNKNOWN_ERROR] The error code * @param {Number} [error.module=core] The name of the plugin the error belongs to * @param {Request} request ExpressJS HTTP Request * @param {Request} request.method Request's HTTP method * @param {Request} request.url Request's url * @param {Request} request.headers Request's headers * @param {Response} response ExpressJS HTTP Response * @param {Function} next Function to defer execution to the next registered middleware */ ErrorController.prototype.errorAction = function(error, request, response, next) { if (!error || !error.code) error = errors.UNKNOWN_ERROR; if (!error.module) error.module = 'core'; process.logger.error('Error', { code: error.code, module: error.module, message: error.message, method: request.method, path: request.url, headers: request.headers }); // Send response with HTML content if (request.accepts('html') && (error.httpCode == '401' || error.httpCode == '403')) { response.status(error.httpCode); defaultController.defaultAction(request, response, next); return; } // Send response with JSON content or HTML but not 401 or 403 errorCode response.status(error.httpCode); response.send({ error: { code: error.code, module: error.module, message: error.message } }); }; /** * Handles forgotten requests. * * Depending on request Accept HTTP header, either an HTML content, * a JSON content or a text content will be returned with a 404 code. * * @param {Request} request ExpressJS HTTP Request * @param {Request} request.method Request's HTTP method * @param {Request} request.url Request's url * @param {Request} request.headers Request's headers * @param {Response} response ExpressJS HTTP Response */ ErrorController.prototype.notFoundPageAction = function(request, response) { process.logger.warn('404 Not Found', { method: request.method, path: request.url, headers: request.headers }); response.status(404); // HTML content if (request.accepts('html')) { response.render('404', { url: request.url }); return; } // JSON content if (request.accepts('json')) { response.send({ error: 'Not found', url: request.url }); return; } // Text content response.type('txt').send(request.url + ' not found'); };