Angular JSのMongoDBでドキュメントを削除または更新する際にエラーを処理する方法を理解しようとしていますか?ExpressでMongoDBデータベースの更新/削除から角型コントローラのエラーを処理するには?
私はノード/ Expressの次のルートを持っている:
function handleError(res, reason, message, code) {
console.log("ERROR: " + reason);
//log the reason for the error
res.status(code || 500).json({
"error": message
});
}
app.delete("/polls/:id", auth, function(req, res) {
db.collection(POLLS_COLLECTION).deleteOne({
_id: new ObjectID(req.params.id), userID: req.user.id
//userID must match the req.user.id from Passport to make sure the poll belongs to the user
}, function(err, doc) {
if (err) {
handleError(res, err.message, "Failed to delete poll");
} else {
res.status(204).end();
}
});
});
角度JSコントローラで次のコントローラで
$scope.deleteThisPoll = function(){
Polls.deletePoll($routeParams.pollId)
.then(function(response){
alert("Poll deleted!");
var url = "/mypolls/" + $scope.userID;
$location.path(url);
}, function(response){
alert("Error deleting poll");
console.log(response);
})
};
deleteThisPollはにAA要求を送信deletePollサービスを呼び出しますルート:
this.deletePoll = function(pollId){
var url = "/polls/" + pollId;
return $http.delete(url);
};
「エラーを削除しています」というメッセージが表示されます。frデータベースの削除が実行されない場合(ユーザーが認証されていないか、または投票がユーザーに属していないため)、削除が成功した場合は "Poll Deleted"のAngularコントローラを使用します。
ただし、エラーコールバックは一度も使用されず、アプリは常に「ポーリングを削除しました」と警告します。文書が削除されたかどうかに関係なく、削除されます。
削除が実行されなかったときに私のルートからエラー応答が送信されず、角度エラーコールバックが発生しませんか?あなたの角度JSコントローラで
<div style="color:red;">
{{error}}
</div>
:
$scope.deleteThisPoll = function(){
Polls.deletePoll($routeParams.pollId)
.then(function(response){
alert("Poll deleted!");
var url = "/mypolls/" + $scope.userID;
$location.path(url);
}, function(response){
$scope.error="Any error message you like to show";
console.log(response);
})
};
あなたのルートはhttpエラーを送信しないと思います。 fiddlerを使用してレスポンスAPIを視覚化します。 APIがHTTPエラーを返す場合は、私の例からエラーをキャッチしてください。 –
right _idとuserIDのドキュメントが見つからない場合、削除/更新はありませんが、エラーとはみなされません。そのような場合には私は応答を送る必要がありますか? – chemook78
httpコード(http://www.restapitutorial.com/httpstatuscodes.html)がたくさんあります。あなたの場合は、404エラーを使用する必要があります。そして、角度コードで特定のアクションを実行する必要があります。 –