From 73b2d7d65664e8554f9826abd609f973524323d0 Mon Sep 17 00:00:00 2001 From: Wesnydy Ribeiro Date: Wed, 1 Mar 2017 12:29:55 -0300 Subject: [PATCH] Api error handling --- translate-api/app.js | 11 +++++++++-- translate-api/config/db.js | 9 +++------ translate-api/controllers/video.js | 19 ++++++++++--------- translate-api/helpers/amqpManager.js | 3 +++ translate-api/helpers/error.js | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 58 insertions(+), 17 deletions(-) create mode 100644 translate-api/helpers/error.js diff --git a/translate-api/app.js b/translate-api/app.js index a1ec751..849f357 100755 --- a/translate-api/app.js +++ b/translate-api/app.js @@ -52,8 +52,15 @@ app.use('/video', video); * Error handler. */ app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.json({ message: err.message, error: err }); + if (app.get('env') !== 'development') + delete err.stack + res.status(err.status).json({ + error: { + 'message': err.message, + 'status': err.status, + 'stack': err.stack + } + }); }); module.exports = app; diff --git a/translate-api/config/db.js b/translate-api/config/db.js index 648db95..456f53f 100644 --- a/translate-api/config/db.js +++ b/translate-api/config/db.js @@ -1,6 +1,6 @@ /** - * Author: LaƩrcio S. Bezerra - * Email: laerciosouza@lavid.ufpb.br + * Author: Wesnydy L. Ribeiro + * Email: wesnydy@lavid.ufpb.br */ /* @@ -9,13 +9,10 @@ 'use strict'; /* - * Required Lib. + * Required Libs. */ var mongoose = require('mongoose'); -/* - * My Lib for javascript Promises - */ mongoose.Promise = require('bluebird'); /* diff --git a/translate-api/controllers/video.js b/translate-api/controllers/video.js index 7e71c1e..44536bf 100644 --- a/translate-api/controllers/video.js +++ b/translate-api/controllers/video.js @@ -10,11 +10,12 @@ */ var shortid = require('shortid') , Video = require('../models/video') - , amqp = require('../helpers/amqpManager'); + , amqp = require('../helpers/amqpManager') + , error = require('../helpers/error'); -exports.create = function(req, res) { +exports.create = function(req, res, next) { if (!req.body.gloss) - return console.log('Gloss key missing'); + return error.badRequest('The gloss key is missing.', next); var id = shortid.generate(); var gloss = req.body.gloss; @@ -26,7 +27,7 @@ exports.create = function(req, res) { new Promise(function (resolve) { video.save(function(err) { if (err) - return console.error(err); + return error.internalError('A database error has occurred.', next); res.json({ id: video._id }); resolve(gloss); }); @@ -35,10 +36,10 @@ exports.create = function(req, res) { return new Promise(function(resolve) { amqp.sendToQueue(gloss, id, 'glosses', false, res, function(err) { if (err) - return console.error(err); + return error.internalError('An internal communication error has occurred.', next); amqp.receiveFromQueue(id, 'videos', false, res, function(err, message) { if (err) - return console.error(err); + return error.internalError('An internal communication error has occurred.', next); resolve(message); }); }); @@ -53,20 +54,20 @@ exports.create = function(req, res) { } }, {new: true}, function(err, content) { if (err) - return console.log(err); + return error.internalError('A database error has occurred.', next); }); }); }); }; -exports.status = function(req, res) { +exports.status = function(req, res, next) { // Receive param id var contentID = req.params.id; // Find content by id on MongoDB return Video.findById(contentID, function (err, video) { // returns error when can not find content if (err) - res.status(404).send('Not Found'); + return error.notFound('Can\'t find any content.', next); else res.json( { 'status': video.status, 'file': video.file, 'size': video.size } ); }); diff --git a/translate-api/helpers/amqpManager.js b/translate-api/helpers/amqpManager.js index f25362b..2ec776b 100644 --- a/translate-api/helpers/amqpManager.js +++ b/translate-api/helpers/amqpManager.js @@ -1,4 +1,7 @@ /** + * Author: Jonathan Lincoln Brilhante + * Email: jonathan.lincoln.brilhante@gmail.com + * * Author: Wesnydy Lima Ribeiro * Email: wesnydy@lavid.ufpb.br */ diff --git a/translate-api/helpers/error.js b/translate-api/helpers/error.js new file mode 100644 index 0000000..5e88eda --- /dev/null +++ b/translate-api/helpers/error.js @@ -0,0 +1,33 @@ +/** + * Author: Wesnydy Lima Ribeiro + * Email: wesnydy@lavid.ufpb.br + */ + +'use strict'; + +/** + * Error when not find the resource. + */ +exports.notFound = function(message, next) { + var err = new Error(message || 'The requested resource couldn\'t be found.'); + err.status = 404; + next(err); +}; + +/** + * Error when receive a malformed request syntax. + */ +exports.badRequest = function(message, next) { + var err = new Error(message || 'The Request can\'t be fulfilled due to bad syntax.'); + err.status = 400; + next(err); +}; + +/** + * Error when workers processing. + */ +exports.internalError = function(message, next) { + var err = new Error(message || 'An internal error occurred during processing.'); + err.status = 500; + next(err); +}; -- libgit2 0.21.2