节点护照自定义回调是否可以作为快速路由的中间件?

Is node passport custom callback as middleware possible for express routes?

我正在使用 node.js 创建一个简单的 Rest Api 并使用 jwt 令牌保护它,我已经设置了 passport 和 passport-jwt 来验证哪个工作正常,如果有jwt 令牌错误或不存在,passport 将发送 401 和 'Unauthorized' 的正文。我知道如何更改路由的错误以通过执行以下操作发回我想要的自定义错误消息;

router.route('/test')
    .put(function(req, res, next) {
    passport.authenticate('jwt', { session: false }, function(err, user, info) {
        if (err) { return next(err); }
        if (!user) { return res.send("Custom Unauthorised").end();  }
        return res.send("Test Route Accessed").end();
    })(req, res, next);
});

我有大约 20 条路线,我将它们命名为类似于以下内容;

router.route('/books/:id/authors').get(passport.authenticate('jwt', { session: false }), myRoutes.books.authors);

现在您会注意到我将特定于资源的路由存储在它们自己的文件中(即 myRoutes.books)所以我的问题是,有没有一种方法可以将自定义回调作为中间件而不需要对路由文件?

干杯

希望我理解正确你的问题。

创建一个函数,我们称它为 jwt

function jwt (req, res, next){
    passport.authenticate('jwt', { session: false }, function(err, user, info) { 
        if (err) { return next(err); } 
        if (!user) { return res.send("Custom Unauthorised").end(); } 
        // edit as per comment
        //return res.send("Test Route Accessed").end();
        req.user = user;   // Forward user information to the next middleware
        next();
    })(req, res, next);
}

并将其用作中间件

router.get('/bla', jwt, handleBla);