AJAX响应错误:net :: ERR_EMPTY_RESPONSE

时间:2017-01-11 22:58:13

标签: javascript jquery ajax node.js firebase

CODE:

FRONT-END

$(document).ready(function(){
        $('.delete-post').on('click', function(){
            var id = $(this).data('id');
            var section = $(this).data('section');
            var url = '/users/delete/'+id;
            if(confirm("Delete Post ?")){
                $.ajax({
                    url: url,
                    type:'DELETE',
                    success: function(result){
                        console.log('Deleting post...');
                        window.location.href='/users/profile';
                    },
                    error: function(err){
                        console.log(err);
                    }
                });
            }
        });
    });

BACK-END:

router.delete('/delete/:id', function(req, res, next) {

    var id = req.params.id;
    var section = req.params.section;

    var image = "";
    var author = "";

    var postRef = firebase.database().ref("posts/"+section+"/"+id);
    var userRef = firebase.database().ref("users/posts/"+id);
    var likesRef = firebase.database().ref("users/likes/"+id);
    var hotRef = firebase.database().ref("hot/"+section+"/"+id);

    postRef.once('value', function(snapshot){
        image = snapshot.image;
        author = snapshot.author;

        if (firebase.auth().currentUser.uid.toString() == author) {
            var file = bucket.file(image);

            file.delete(function (err, apiResponse) {
                  if (err) {
                    console.log(err);
                  }
                  else {
                    console.log("Deleted successfully");

                    postRef.remove();
                    userRef.remove();
                    hotRef.remove();
                    likesRef.remove();

                    req.flash('success_msg','Post Deleted');
                    res.send(200);
                  }
            });
        }    
    });
});

状况:

我添加了删除按钮,以便用户可以删除他的帖子。

当用户点击该按钮时,会向我的Node.js服务器发出AJAX请求。

但是我收到以下错误:

错误:

net::ERR_EMPTY_RESPONSE

问题:

这是什么错误,如何解决?

1 个答案:

答案 0 :(得分:3)

您获得的回复实际上是正确。根据{{​​3}},Firebase会返回200状态代码,返回空响应net::ERR_EMPTY_RESPONSE就是这样。您应该做的是检查响应中的null200状态代码;如果为true,您可以放心地假设该帖子已被删除。

我个人认为,Firebase应该考虑返回比 nothing 更重要的内容以及通用的全能状态代码。我喜欢204 No Content或410 Gone之类的东西。但是,唉。

-

附注:如果帖子不属于作者,此条件将永远不会返回任何内容 - 您的API仍应返回某些内容(错误,可能在这种情况下),即使您的条件不匹配。像:

if (firebase.auth().currentUser.uid.toString() == author) { 
    // your code
} else {
    res.status(401).send("User does not have permission to complete the operation.")
}