app.use中间件不会为路由执行

时间:2017-05-20 17:56:51

标签: javascript node.js express routing middleware

我正在关注此tutorial并且我想做类似的事情,当我的用户访问其他路线时,注册并登录我希望他发送令牌以便访问这些路线。

如果我向 / login / register 提出请求。

但是当我向 / fotos my app.use(jwtPermission)提出请求时;应该被执行。

以下是我的应用服务器初始页面:

var jwt = require('jsonwebtoken');
var jwtPermission = require('./controller/jwtPermission');
var fotos = require('./routes/fotos');
var app = express();
var router = express.Router();


// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));


app.use('/',require('./routes/index'));
app.use(jwtPermission);
app.use('/fotos',fotos);

我的jwtPermission文件位于控制器内部,此控制器文件夹与我的服务器初始启动文件处于同一级别。

以下是我在jwtPermission中的内容:

var jwt = require('jsonwebtoken');
var jwtConfig = require('../config/jwt');

module.exports = function(req, res, next) {
    console.log("entered");

    // check header or url parameters or post parameters for token
    var token = req.body.token || req.query.token || req.headers['x-access-token'];
          console.log(req.headers['x-access-token']);
    // decode token
    if (token) {
        // verifies secret and checks exp
        jwt.verify(token,jwtConfig.secret, function (err, decoded) {
            if (err) {
                return res.json({ success: false, message: 'Failed to authenticate token.' });
            } else {
                // if everything is good, save to request for use in other routes
                req.decoded = decoded;
                next();
            }
        });
    } else {
        // if there is no token
        // return an error
        return res.status(403).send({
            success: false,
            message: 'No token provided.'
        });
    }
}

如果我指向/ fotos它永远不会到达jwtPermission文件,如果我将app.use(jwtPermission)更改为我的注册app.use之上,它可以工作,但中间件会被调用所有路由,包括 /注册 / login

需要一些帮助:)。

谢谢!

1 个答案:

答案 0 :(得分:0)

这个怎么样?

app.use('/fotos',jwtPermission, fotos);

next内调用jwtPermissionfotos中间件将被调用。

干杯。