【问题标题】:router.use middleware does not get calledrouter.use 中间件没有被调用
【发布时间】:2026-02-21 23:55:01
【问题描述】:

我有一个使用 NodeJS 运行的简单服务器应用程序,我尝试实现 this 教程中的路由保护,我已经拥有每次登录时都可以使用的令牌。

所以这个中间件应该被调用到除了注册和登录之外的所有路由。所以我在我的初始设置中这样做了:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var debug = require('debug')('express-sequelize');
var http = require('http');
var models = require('./models');
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,我只设置了控制器,如你们所见。

我在该控制器中有一个 console.log,但它永远不会被调用。

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

【问题讨论】:

    标签: javascript node.js express token jwt


    【解决方案1】:

    您在Route 对象中配置您的路由,但您必须将其附加到您的app 对象中。

    因此,在这种情况下,请将 route.use 更改为 app.use

    不需要使用路由对象。

    【讨论】:

    • 谢谢你的回答,为什么我不能用路由呢?你能解释一下吗?
    • 其实可以的。但在您的事业中,没有必要使用路由器。但如果你真的这样做,你可以在最后附加routerapp。像这样:app.use(router);
    • 嘿,leadro 还在那里,昨天我也有同样的问题,我将所有内容都更改为 app.use,但如果我将 jwtPermission 放在 app.use(身份验证)之前,jwtPermission 就可以工作,任何建议,谢谢:D
    • 做到了,如果我把这个权限放在'/' app.use 之前,它可以工作,但是对于所有路由,即使是身份验证,我只想对除身份验证之外的所有路由执行此操作