序文:は JSの約束がエラーオブジェクトを空にしているのはなぜですか?
req.helpers.consoleMessage
関数にして表示しないと判断することにいくつかの簡単なロジックを有する関数であるブルーバードを使用し、マングースの内部mpromiseを交換マングース- アプリケーション構成でオンになっているデバッグの存在と、表示されているオブジェクトの非ヌル/未定義状態に基づく特定のレベルの詳細。メッセージ全体は
JSON
を使用して文字列に変換され、コンソールに表示されます。
コード:
ここでは、これらの症状を示すいくつかのコードの例です。
これは、私が取り組んでいるAPIの:team
:comment
ユニットのdelete
ルートです。私は意図的に、という行に、実際にはteam
でなければならないときに、user
というオブジェクトを参照している間違いを残しています。これは呼び出し関数から返され、Promise .then()
に渡されるべきです。ユーザーが定義されていないため、参照エラーが発生するはずです。
var console = clim("(DELETE /api/v1/team/:team/comments/:comment):", logger);
// create a filters request for mongoose
var query = {};
// determine if the :team param is a username or an object id
req.helpers.validateObjectId(req.db, req.params.team) ? query._id = req.params.team : query.name = req.params.team;
if(req.helpers.validateObjectId(req.db, req.params.comment)) {
// looks good; create an update object
var update = { $pull: { comments: { _id: req.params.comment } } };
// find the comment using the query above and pull the comment id
req.models.Team.findOneAndUpdate(
query,
update,
{safe: true, new : true}
).then(function(team){
if(!team){
// create the response object
var response = {
success: false,
message: "Team not found"
};
// log request
console.info(req.helpers.consoleMessage(req, response, null));
// respond with an appropriate array
res.status(404).json(response);
}else{
// create the response object using the teams's comments
var response = user.comments;
// log request
console.info(req.helpers.consoleMessage(req, response, null));
// respond with the team comments array
res.status(200).json(response);
}
}).then(null, function(err){
// create the response
var response = { success: false, message: req.config.debug ? err: "An error has occur with your request; please try again" };
// log the errors
console.error(req.helpers.consoleMessage(req, response, err));
// or send a 500 internal server error
res.status(500).json(response);
});
}else{
// create the response
var response = { success: false, message: "Comment id is not a valid object id" };
// log the errors
console.info(req.helpers.consoleMessage(req, response, null));
// or send a 500 internal server error
res.status(500).json(response);
}
症状:
はエラーを生成し、.catch()
は、エラー状態から回復しようとする試みに発射するようになりますこのルートを呼び出すと、しかしerr
オブジェクトは空のように見えます。
Ex。 HTTP応答:{ success: false, message: {} }
Ex。 (わかりやすくするために簡略)コンソールログ{ req: {...}, res: {...}. err: {} }
結論:err
オブジェクトが空のように見える
...
Cool!分かち合いありがとうございます。 – danilodeveloper
ハ、私はまったく同じ間違いをしました。これは私にとって今日のスタックオーバーフローで最も有用なものです。ありがとう。 – jlegler