所以我遇到了我认为是绑定问题,由connect-mongo或expressjs引起这里是代码:
//Error
app.use(function(err, req, res, next) {
if (err instanceof noData) {
res.send(err, 404);
} else {
next(err);
}
});
我的自定义错误处理程序
function noData(err){
this.code = 0;
this.msg = err;
console.log(Error);
Error.call(this, {code:0, msg:err});
Error.captureStackTrace(this, arguments.callee);
};
noData.prototype.__proto__ = Error.prototype;
此处抛出错误:
err = true;
//if(err) throw new noData('No Password');
//Get user from database
db.collection('users').find({}, {limit:1}).toArray(function(err, result) {
if(err) throw new noData('No Data');
});
第一个错误正确抛出,但第二个错误但第二个错误抛出了一般的nodejs错误。
throw e; // process.nextTick error, or 'error' event on first tick
我在这里做错了什么?是connect-mongo导致它以某种方式失去绑定? 非常感谢任何想法。
答案 0 :(得分:0)
问题不在于express或connect-mongo,回调是在不同的范围内。要解决这个问题,只需在通话结束时添加一个(这个)。
//Get user from database
db.collection('users').find({}, {limit:1}).toArray(function(err, result) {
if(err) throw new noData('No Data');
}(this));
现在节点知道我的自定义错误。 (哈利路亚) 这基本上是一个iife,它允许我传入一个参数。