为什么“ module.exports =(req,res)=> {”阻止我的路由工作

时间:2019-04-17 02:54:27

标签: javascript node.js routing

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('/')
    })
}

我希望控制器直接指向索引。

1 个答案:

答案 0 :(得分:0)

如果按钮最终触发了通过控制器到您服务器的ajax调用,则ajax调用本身不会关注重定向响应(因此res.redirect()不会执行任何操作)。您将必须在客户端控制器中具有代码,该代码可以查看来自ajax调用的重定向响应,然后通过相应地设置window.location来对其进行操作,从而导致浏览器页面发生更改。

浏览器中会自动响应响应的内容:

  • 在浏览器的网址栏中输入一个网址
  • 跟随网页中的链接(例如<a href="xxx">Click here</a>
  • 通过JavaScript设置window.location
  • 来自表单帖子的响应(由浏览器自动提交,而不是通过Javascript提交)

因此,如果您的请求是通过Javascript发送的,则它不会自动遵循重定向响应。您的Javascript必须看到响应返回,看到它是3xx响应,从响应中获取重定向位置,然后设置window.location来告诉浏览器转到该新位置。