【发布时间】:2015-01-22 14:34:39
【问题描述】:
我正在开发一个应用程序。在该应用程序中,我定义了一些自定义错误,如下所示
'use strict';
/**
* Validation error.
* The Default HTTP STATUS CODE for ValidationError is 400 (HTTP BAD REQUEST)
*
*/
/* Globals */
var HTTP_BAD_REQUEST = 400;
var NAME = 'ValidationError';
/**
* Constructor
*
* @param {String} message The validation error message
*/
function ValidationError(message) {
this.name = NAME;
this.message = message;
this.code = HTTP_BAD_REQUEST;
}
ValidationError.prototype = new Error();
/**
* Module exports
*/
module.exports = ValidationError;
现在我使用 require 将该模块导入到其他模块中,例如
var UnauthorizedError = require('../errors/UnauthorizedError')
在控制器中
// perform some logic
if(somecondition) {
// call global error handler
next(new ValidationError('id is must');
} else {
// call next middleware
next();
}
Enen if somecondition 为 false next() 正在调用错误处理程序中间件。
我定义了我的错误处理程序中间件,如下所示
var winston = require('winston');
var HTTP_INTERNAL_SERVER_ERROR = 500;
var MESSAGE = 'Internal Server Error';
/**
* Express standard error middleware
*
* @param {Error} err error object
* @param {Object} req express request object
* @param {Object} res express response object
* @param {Function} next express next function
*/
var middleware = function(err, req, res) {
winston.error(err);
res.status(err.code || HTTP_INTERNAL_SERVER_ERROR).json(err.message || MESSAGE);
};
/**
* Module exports
*/
module.exports = function() {
return middleware;
};
我在我的应用程序中使用 errorHandler,例如
app.use(errorHandler());
注意,在错误处理程序中,我正在向客户端发送带有一些状态代码和错误消息的 json 数据。但是,如果我签入邮递员,则响应标头是
Connection → keep-alive
Content-Length → 695
Content-Type → text/html; charset=utf-8
Date → Thu, 22 Jan 2015 14:18:13 GMT
X-Content-Type-Options → nosniff
X-Powered-By → Express
内容主体是错误的堆栈跟踪
我已经验证了 next with error 没有被调用并且 somecondition 是 false 并且 error Handler 中间件也没有被调用。
【问题讨论】:
-
你能把剩下的中间件脚手架贴出来吗?
标签: javascript node.js rest