1

所以我遇到了我认为是由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 是否会导致它以某种方式失去绑定?任何想法都非常感谢。

4

1 回答 1

0

问题不在于 express 或 connect-mongo,回调在不同的范围内。要解决此问题,只需在调用末尾添加 (this)。

  //Get user from database
  db.collection('users').find({}, {limit:1}).toArray(function(err, result) {
    if(err) throw new noData('No Data');             
  }(this));

现在节点知道我的自定义错误。(哈利路亚)这本质上是一个允许我传递参数的iife 。

于 2012-04-10T22:15:13.877 回答