2017-01-27 6 views
1

私はMongooseドキュメントを掘り下げましたが、エラー処理方法についての情報はまだ見つかりませんでした。query.exec()。私が間違ったのuserIdを渡すとmongooseでの適切なエラー処理query.exec()

var query = User.findOne({_id: userId}); 

    var promise = query.exec(function(err) { 
     if (err) { 
      res.json(err); 
      return; 
     } 
    }); 
    promise.then(function(user) { 
     res.json(user.name); 
    }); 

、私はコンソールに出力さUnhandled rejection CastError: Cast to ObjectId failedなエラーになっています。

私はres.json(err)に続いてreturnステートメントは、エラーを正しく処理してコンソールに表示されないようにするには十分だと考えましたが、そうではありません。代わりに私は何をすべきですか?コールバック付き

+1

(ERR ){}) –

+0

@AsifSaeedありがとう、これはまさに私が知る必要があったものです! – CorrieSparrow

+0

私は答えが無かった最初の人でした:D –

答えて

2

var query = User.findOne({_id: userId}); 
query.exec(function (err) { 
    if (err) { 
     // handle error 
     return; 
    } 
    // handle success 
}); 

約束:

var query = User.findOne({_id: userId}); 
query.exec().then(function() { 
    // handle success 
}).catch(function (err) { 
    // handle error 
}); 

現在、あなたはこれらのスタイルの両方を混合しています。 1つのスタイルを選択し、代わりにそれに固執する。

var query = User.findOne({_id: userId}); 

    var promise = query.exec(function(err) { 
     if (err) { 
      res.json(err); 
      return Promise.reject(err); // Updated this line 
     } 
    }); 
    promise.then(function(user) { 
     res.json(user.name); 
    }); 

使用の約束適切に:あなたのコードに最小限の変更に伴い

1

あなたが幹部に代わり、コールバックのキャッチを使用 promise.catch(機能いけないなぜ約束を使用している

User.findOne({_.id: userId}) 
    .then(function(user) { 
    return res.json(user.name); 
    }) 
    .catch(function(err) { 
    return res.json(err); 
    }); 
関連する問題