简体   繁体   中英

Route not executing after middleware

So I'm creating an authentication route but failing after executing the middleware.

verifyToken.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')
}
}

user.controller.js

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

user.route.js

const { currentUser } = require('../controllers/users');
router
   .route('/currentuser')
   .post(currentUser)

I tried your code and I couldn't log 'HIT' as well. I suggest the following, split the exports @ exports.currentUser into

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}

Then re-write route.js like this to get it to work.

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

To utilize next(), I had to use router.get('/get', middleware, callback). I changed the codes so that I could test it. You will need to edit the codes according to your context!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM