我正在尝试将Post-Redirect-Get设计模式实现到我的代码中,该代码使用Express。我所拥有的是:
var sessionVariable;
app.post('/user', function(req, res) {
sessionVariable = req.session;
// Sets a session variable to a token
sessionVariable.token = req.body.token;
// Redirect to /user
return res.redirect('/user')
});
app.get('/user', function(req, res) {
sessionVariable = req.session;
if(sessionVariable.token){
res.send('Logged in');
} else {
res.send('Not logged in');
}
});
我期待发生的事情是当用户向/ user提交POST请求时,它将定义sessionVarlable.token
,然后再次重定向到/ user,检查是否存在令牌。
最终发生的事情是我将提交POST请求,并通过控制台记录我可以看到app.post触发,但它不会重定向。相反,它似乎停留在省略POST请求的页面上。
这是什么原因?
修改:任何res
都不会在app.post下触发,例如: res.send('test')
无效。
答案 0 :(得分:0)
根据评论中的信息,您正在制作AJAX请求。而不是让客户端从服务器端重定向,只需在客户端进行。这是在浏览器上使用Axios的示例(您可以使用AJAX执行基本相同的操作,只是更麻烦):
axios.post('/user', { token: 'tokenhere'}).then(function(response) {
// Status 200 means OK
if (response.status === 200) {
window.location.href = 'user'
}
})
答案 1 :(得分:0)
我已将此答案发布到其他地方:Understanding the "post/redirect/get" pattern
但这是对我有用的代码:
app.post('/data', function(req, res) {
data = req.body;
res.redirect('/db.html');
});