javascript - AJAX 响应错误:net::ERR_EMPTY_RESPONSE

标签 javascript jquery ajax node.js firebase

代码:

前端

$(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);
                    }
                });
            }
        });
    });

后端:

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
<小时/>

问题:

这个错误是什么以及如何修复它?

最佳答案

您得到的响应实际上正确。根据 docs ,Firebase 返回 200 状态代码和空响应net::ERR_EMPTY_RESPONSE 正是如此。您应该做的是检查响应中的 null200 状态代码;如果属实,您可以放心地假设该帖子已被删除。

我个人的观点是,Firebase 确实应该考虑返回比什么都没有更重要的东西以及通用的、包罗万象的状态代码。我更喜欢 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.")
}

关于javascript - AJAX 响应错误:net::ERR_EMPTY_RESPONSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41602271/

相关文章:

javascript - 调用 vuejs 方法的 jQuery 全局按键事件方法无法按预期工作。为什么?

ajax调用的成功函数中未设置javascript类属性

c# - 如何从 C# TcpListener 使用 jQuery ajax 读取 HTTP 响应?

javascript - 使用AJAX数据更新SQLite : how to handle two asynchronous calls

javascript - VueJS 深度观察者 - 多个对象的特定属性

javascript - "Vertically stick on the middle screen"错误

javascript - 通过逻辑运算符分配变量值的 typescript 仅使用后一种类型

javascript - 无法选择和无法复制的 HTML 文本

php - 如何用ajax查看表单上传的文件?

javascript - 单击按钮时 Google map 不会覆盖整个屏幕