NodeJS 如何直接调用Connect中间件?

m1m5dgzv  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(161)

我有一条这样的快速路线:

app.get('/', auth.authOrDie, function(req, res) {
    res.send();
});

其中authOrDie函数的定义如下(在我的auth.js模块中):

exports.authOrDie = function(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    } else {
        res.send(403);
    }
});

现在,当用户没有经过身份验证时,我想验证http请求是否有Authorization(Basic)头。要做到这一点,我想使用伟大的连接中间件basicAuth()
如您所知,Express构建在Connect之上,因此我可以使用express.basicAuth
basicAuth通常是这样使用的:

app.get('/', express.basicAuth(function(username, password) {
    // username && password verification...
}), function(req, res) {
    res.send();
});

但是,我想在我的authOrDie函数中使用它:

exports.authOrDie = function(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    } else if {
        // express.basicAuth ??? ******
    } else {
        res.send(403);
    }
});

如何使用好的参数(req?下一个?...).

6tr1vspr

6tr1vspr1#

调用express.basicAuth函数将返回要调用的中间件函数,因此您可以直接调用它,如下所示:

exports.authOrDie = function(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    } else {
        return express.basicAuth(function(username, password) {
            // username && password verification...
        })(req, res, next);
    }
});

相关问题