验证Express 4路由器上某些路由的更好方法是什么?

Zla*_*tko 12 authentication routes node.js express passport.js

我正在使用Express 4,我有一条受passport.js保护的路线,如下所示:

var media = require('express').Router();

media.get('/', function(req, res) {
    // provide results from db
});

media.post('/', passport.authenticate('bearer'), function(req, res) {
    // This route is auth protected
});
Run Code Online (Sandbox Code Playgroud)

所以 - 收集路线应该(大部分)不受我保护,并且应该创建/更新路线.但这需要我将护照传递给我的所有路径文件(到目前为止我已经有7个),然后将其作为中间件添加到其中一些文件中.

我喜欢你可以做这样的事情的版本:

var router = require('./my-router');
app.use('/api/route', passport.authenticate('bearer'));
app.use('/api/route', router);
Run Code Online (Sandbox Code Playgroud)

但这需要在我的所有路线上进行身份验证.

有没有更好的办法通过护照一路走来?

Ben*_*une 31

您可以将路由器拆分为受保护/不受保护的,并在受保护的路由上调用中间件.

var express = require('express'),
    media = express.Router(),
    mediaProtected = express.Router();

media.get('/', function(req, res) {
    // provide results from db
});

mediaProtected.post('/', function(req, res) {
    // This route is auth protected
});

module.exports = {
    protected: mediaProtected,
    unprotected: media
};
Run Code Online (Sandbox Code Playgroud)

然后你就可以做到

var router = require('./my-router');
app.use('/api/route', passport.authenticate('bearer'), router.protected);
app.use('/api/route', router.unprotected);
Run Code Online (Sandbox Code Playgroud)

  • 如果路径路径相同,它将无法工作,如何知道您要使用哪一个?您定义的第一条路线优先. (3认同)