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');             
  });

最初のエラーは正しくスローされますが、2 番目のエラーは一般的な 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));

これで、ノードは私のカスタムエラーを認識します。(hallelujah)これは本質的に私がパラメータを渡すことを可能にするiifeです。

于 2012-04-10T22:15:13.877 に答える