簡體   English   中英

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

[英]Why is “module.exports = (req, res) => {” stopping my routing from working

像這樣調用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('/')
    })
}

我希望控制器指向索引。

如果按鈕最終通過控制器觸發到服務器的ajax調用,則ajax調用本身不會注意重定向響應(因此res.redirect()不執行任何操作)。 您必須在客戶端控制器中看到來自ajax調用的重定向響應的代碼,然后通過相應地設置window.location進行操作以使瀏覽器頁面發生更改。

瀏覽器中的內容會自動跟隨響應中的重定向:

  • 在瀏覽器的URL欄中鍵入URL
  • 關注網頁中的鏈接(例如<a href="xxx">Click here</a>
  • 通過Javascript設置window.location
  • 表單帖子的響應(由瀏覽器自動提交,而不是通過Javascript提交)

因此,如果您的請求是通過Javascript發送的,那么它將不會自動遵循重定向響應。 您的Javascript必須看到響應返回,看到它是3xx響應,從響應中獲取重定向位置,然后設置window.location以告知瀏覽器轉到該新位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM