为什么我的expressjs中间件中运行的是next()之后的代码?

问题描述 投票:0回答:1

我试图通过调用中间件内的 next() 来访问路由处理程序,但 next() 正在执行之后的日志,并且没有调用路由处理程序。

const verifyToken = (req, res, next) => {
    try {
        console.log('Hello')
        const token = req.cookies.token

        if (!token) {
            console.log('Unauthorized. No Token Available.')
            return res.status(401).json({
                success: false,
                message: 'Unauthorized. No Token Available'
            })
        }

        const decoded = jwt.verify(token, process.env.JWTSECRET)
        console.log(decoded)
        req.user = decoded

        console.log(decoded)
        next()
        console.log('sdfkjslfas')
    } catch (err) {
        if (err.name === 'JsonWebTokenError' || err.name === 'TokenExpiredError') {
            return res.status(401).json({
                success: false,
                message: 'Unauthorized. Invalid Token'
            })
        }

        res.status(500).json({
            success: false,
            message: 'Server failure. Try again later!!!!!'
        })
    }
}

我尝试了一切,但找不到我陷入困境的地方。日志似乎在整个 verifyToken 中间件上运行,但后续的路由处理程序没有被执行。

node.js express jwt
1个回答
0
投票

next
只是一个函数。返回后,其余代码将执行。

如果这是终端中间件句柄(很可能是),您可能需要使用

return next()

© www.soinside.com 2019 - 2024. All rights reserved.