代码之家  ›  专栏  ›  技术社区  ›  code.cycling

路由未在中间件之后执行

  •  -1
  • code.cycling  · 技术社区  · 4 年前

    所以我创建了一个身份验证路由,但在执行中间件后失败了。

    验证令牌。js

    module.exports = function (req, res, next) {
    const token = req.get('auth-token')
    if (!token) return res.status(401).send('Access Denied!')
    try {
        const verified = jwt.verify(token, process.env.TOKEN_SECRET)
        req.user = verified
        console.log(req.user) // successfully logging
        next()
    } catch (err) {
        res.setHeader('Content-Type', 'application/json');
        res.status(403).send('Invalid Token')
    }
    }
    

    使用者控制器。js

    exports.currentUser = verifyToken, async (req, res) => { // after verify token throwing an error 404
       console.log('HIT') // not logging
       // return res.send(req.user)
    }
    

    使用者路线js

    const { currentUser } = require('../controllers/users');
    router
       .route('/currentuser')
       .post(currentUser)
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   CodeCodey    4 年前

    我试过你的代码,但也无法记录“HIT”。我建议如下,将导出拆分为@exports。当前用户进入

    var verifyToken = require('./verifyToken.js')
    
    var response = async (req, res) => {
       console.log('HIT') // not logging
       // return res.send(req.user)
    }
    
    module.exports.currentUser = {verifyToken, response}
    

    const { currentUser } = require('./controller.js');
    router.get('/currentUser', currentUser.verifyToken, currentUser.response)
    

    为了利用next(),我必须使用路由器。get('/get',中间件,回调)。我更改了代码以便测试它。您需要根据您的上下文编辑代码!