Intereting Posts

Node.Js保证redirect不起作用

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

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

基本上我想redirect到页面设置,所以页面重新加载新的数据。 但是在promise链中,我不能使用任何响应函数。 我使用redirect错误? 或者我不能在诺言链中发送回复?

Solutions Collecting From Web of "Node.Js保证redirect不起作用"

你误认了这个问题。

当你发出一个HTTPredirect时,你会说:“你正在寻找的东西?而不是来自这里。”

这不同于“浏览器应该显示这个URL作为一个新的页面”。

遵循HTTPredirect,将设置页面传递给浏览器,然后浏览器将其作为成功函数的result 。 (你完全忽略它,因为你没有把这个函数放进去)。

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

设置页面可能不应该dynamic确定,所以你可能只是硬编码的URL到成功函数。

硬编码会更有意义,因为您不应该发送redirect来响应DELETE请求 :

如果一个DELETE方法被成功应用,原始服务器应该发送一个202(接受的)状态码,如果这个动作可能成功但是还没有被执行,一个204(无内容)状态码,如果这个动作已经被执行,信息将被提供,或者如果动作已经被执行并且响应消息包括描述状态的表示,则提供200(OK)状态码。