我在 node.js (0.8.12) 和 express (2.5.8) 中使用自定义错误对象。当错误发生时,我想将它们路由到我的自定义错误处理程序,但是我的自定义错误对象被转换为字符串,而原生错误对象保持不变。
这是一个简单的例子:
var express = require('express');
var APIError = function(type) {
this.type = type;
}
APIError.prototype = new Error();
var app = express.createServer();
app.use(app.router);
app.use(apiErrorHandler);
function log(source, err) {
console.log(
source,
typeof err,
err.constructor.name,
err instanceof APIError,
err instanceof Error
);
}
function apiErrorHandler(err, req, res, next) {
log("error handler:", err);
}
app.get('/', function(req, res, next) {
var err = new APIError("notAllowed");
log("router:", err);
next(err);
});
app.listen(80);
此示例的控制台输出如下:
router: object Error true true
error handler: string String false false
如果我替换new APIError("notAllowed")
为new Error("notAllowed")
,则保留该对象,并且请求会产生以下输出:
router: object Error false true
error handler: object Error false true
为什么我的自定义 Error 对象会被转换,尽管它是 Error 的一个实例?