如何在带有express的nodejs中使用next()结构

时间:2018-01-17 22:11:26

标签: node.js express

我正在使用express with node。

我需要使用一个模块('authenticationJwt')来验证用户并在其他模块('user')中调用它。

我正在使用下一个代码,但在调用身份验证模块后,应用程序永远不会继续调用模块中的下一个结构。 例如,我的应用程序console.log('conv')永远不会被调用。

如果我使用sintax:

router.get('/nome/:id',auth.isAuthenticated,async function(req, res, next)....

它有效,但我有很多获取和帖子,我想在全局而不是单独验证所有路由到模块。

我做错了什么?

//用户模块

'use strict';
const express = require('express');
const router = express.Router();
const auth=require('./authenticationJwt'); 

router.use(auth.isAuthenticated);
router.get('/nome/:id',async function(req, res, next) {
    //never is called
    console.log('conv');
})
module.exports=router;

// authenticationJwt module

'use strict';
const express = require('express');
const jwt = require('jsonwebtoken'); // Import JWT Package
const auth = {}
const secret = 'asdsad'; // Create custom secret for use in JWT

auth.isAuthenticated=function(req, res, next) {
        if (!req.header('Authorization')) {
            return res.json({ success: false, message: 'No token provided' }); // Return error if no token was provided in the request
        }

        var token = req.header('Authorization').split(' ')[1];
        // Check if token is valid and not expired  
        if (token) {
            // Function to verify token
            jwt.verify(token, secret, function(err, decoded) {
                if (err) {
                    res.json({ success: false, message: 'Token invalid' }); // Token has expired or is invalid
                } else {
                    req.decoded = decoded; // Assign to req. variable to be able to use it in next() route ('/me' route)
                    next(); // Required to leave middleware
                }
            });
        } else {
            res.json({ success: false, message: 'No token provided' }); // Return error if no token was provided in the request
        }
};
module.exports=auth;

0 个答案:

没有答案