Node.Js承诺重定向不起作用

时间:2017-08-17 12:35:11

标签: javascript node.js promise

我有一个设置页面,您可以插入并删除一些过滤器。对于删除请求,我使用了这个:

$('#delete-filter').click(function (e) {
        var filtername = $('#filter-list').val();
        var filterCount = $('#filter-list option').length;
            var retVal = confirm("Are you sure to delete this filter?");
            if( retVal == true ){
                $.ajax({
                    url: "/settings?filtername=" + filtername,
                    method: 'DELETE',
                    dataType: "json",
                    success: function (result) {

                    }
                });

           }
           else{
              return false;
           }

    });

以下是此页面的路线:

router.delete('/settings', ensureAuthenticated, function (req, res, next) {
    var promise = user.deleteFilter(req.session.user_id, req.query.filtername);
    var promise2 = promise.then(function (data) {
        req.session.selected_filter = data.selected;
        res.redirect('/settings');
    }, function (error) {
        console.log(error);
    })
})

基本上我想重定向到页面设置,因此页面会重新加载新数据。但在承诺链中我不能使用任何响应函数。我使用重定向错了吗?或者我不能在承诺链中发送回复?

1 个答案:

答案 0 :(得分:3)

你错误地认定了这个问题。

当您发出HTTP重定向时,您会说“您正在寻找的东西?从此处获取它。”

这与“浏览器应将此网址显示为新网页”不同。

遵循HTTP重定向,将设置页面传送到浏览器,然后浏览器将其作为成功函数中的result使用。 (然后你完全忽略它,因为你没有在该函数中放任何东西)。

如果您希望浏览器加载新页面,则需要将URL作为数据(而不是重定向)提供,然后将该值分配给location.href

设置页面可能不应动态确定,因此您可以将URL硬编码到成功函数中。

硬编码会更有意义,因为您不应该发送重定向来响应DELETE request

  

如果成功应用DELETE方法,则为原始服务器   如果可能采取行动,应该发送202(已接受)状态代码   成功但尚未颁布,204(无内容)状态   代码,如果该行动已经颁布,没有进一步的信息   如果已提供,则提供,或200(OK)状态代码   制定并且响应消息包括表示   描述状态。