将Regex快递给除api / login /以外的所有路由

时间:2018-11-05 00:00:41

标签: node.js regex express

我正在Express中执行一些身份验证任务:

router.post(
    '*',
    expressJwt({
        secret: config.SECRET,
        getToken: function fromHeaderOrQuerystring(req) {
            if (req.cookies.sessionUniversalCookie) {
                return req.cookies.sessionUniversalCookie;
            }

            return null;
        },
    })
);

我想允许/api/login,所以我希望此路由忽略此路径。这是我的尝试,但此方法不适用于api后调用。

router.post('*', (req, res, next) => {
    if (req.baseUrl === '/api/login') {
        return next();
    }
    expressJwt({
        secret: config.SECRET,
        getToken: function fromHeaderOrQuerystring(req) {
            if (req.cookies.sessionUniversalCookie) {
                return req.cookies.sessionUniversalCookie;
            }

            return null;
        },
    });
});

一个好的选择是匹配正则表达式中除api/login以外的所有路由。我该怎么办?

1 个答案:

答案 0 :(得分:0)

根据第二个代码,如果路由路径为'/ api / login',则要将路由传递到下一部分。 除了'/ api / login',其他路由将处理jwt身份验证。

router.post('/api/login', (req, res, next) => {
    return next();
});

router.post('*', (req, res, next) => {
    expressJwt({
        secret: config.SECRET,
        getToken: function fromHeaderOrQuerystring(req) {
            if (req.cookies.sessionUniversalCookie) {
                return req.cookies.sessionUniversalCookie;
            }

            return null;
        },
    });
});

因此,如果路由为“ / api / login”,则上面的代码会将路由传递到下一部分。

在其他情况下,路由将直接转到jwt部分。