A href的调用方式如下:
<a class="navlink" href="/auth/logout">Logout</a>
单击中间件中的一个控制器(名为“ auth.js”),然后调用另一个控制器“ logout.js”时,它不执行任何操作。该会话应销毁并重定向索引。取而代之的是,薪水略有缩水,但停留在当前页面上。
“ auth.js”
const User = require('../database/models/User')
module.exports = (req, res, next) => {
User.findById(req.session.userId, (error, user) => {
if (error || !user) {
return res.redirect('create')
}
next()
})
}
logout.js”
module.exports = (req, res) => {
req.session.destroy(() => {
res.redirect('/')
})
}
我希望控制器直接指向索引。
答案 0 :(得分:0)
如果按钮最终触发了通过控制器到您服务器的ajax调用,则ajax调用本身不会关注重定向响应(因此res.redirect()
不会执行任何操作)。您将必须在客户端控制器中具有代码,该代码可以查看来自ajax调用的重定向响应,然后通过相应地设置window.location
来对其进行操作,从而导致浏览器页面发生更改。
浏览器中会自动响应响应的内容:
<a href="xxx">Click here</a>
)window.location
因此,如果您的请求是通过Javascript发送的,则它不会自动遵循重定向响应。您的Javascript必须看到响应返回,看到它是3xx响应,从响应中获取重定向位置,然后设置window.location
来告诉浏览器转到该新位置。