[英]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.