簡體   English   中英

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

[英]Node.Js promise redirect doesn't work

我有一個設置頁面,您可以插入和刪除一些過濾器。 對於刪除請求,我使用了這個:

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

基本上我想重定向到頁面到設置,所以頁面重新加載新數據。 但在承諾鏈中我不能使用任何響應函數。 我使用重定向錯了嗎? 或者我不能在承諾鏈中發送回復?

你錯誤地認定了這個問題。

當您發出HTTP重定向時,您會說“您正在尋找的東西?從此處獲取它”。

這與“瀏覽器應將此URL顯示為新頁面”不同。

遵循HTTP重定向,將設置頁面傳送到瀏覽器,然后瀏覽器將其作為成功函數的result (然后你完全忽略它,因為你沒有在該函數中放置任何東西)。

如果您希望瀏覽器加載新頁面,則需要將URL作為數據 (而不是重定向)傳遞,然后將該值分配給location.href

設置頁面可能不應該動態確定,因此您可以將URL硬編碼到成功函數中。

硬編碼會更有意義,因為您不應該發送重定向來響應DELETE請求

如果成功應用了DELETE方法,則原始服務器應該發送202(已接受)狀態代碼(如果操作可能成功但尚未頒布),如果操作已經頒布則為204(無內容)狀態代碼,不再進一步如果已經執行了操作,則提供信息或200(OK)狀態代碼,並且響應消息包括描述狀態的表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM