1

在您的自定义中间件中使用流行的 Connect 中间件是否可行?

例如,我正在编写一些身份验证中间件,它显然在很大程度上依赖于 ConnectcookieParser()session方法。这些方法是中间件,因此它们需要传递request,response和参数。next显而易见的选择是在添加身份验证中间件之前确保将它们添加到中间件堆栈,如下所示:

应用程序.js:

app.use(express.cookieParser('secret'))
   .use(express.session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }}))
   .use(my_auth_middleware())

但这似乎有点麻烦,因为我的中间件依赖前两种方法来处理req.session.

另一种明显的方法是将应用程序传递给我的中间件,然后在其中调用cookieParser()andsession方法,但是因为它们都是中间件,我不得不将它们添加到堆栈中,这感觉不对:

my_auth_middleware.js:

module.exports = function(app){

    app.use(express.cookieParser('secret'));
    app.use(express.session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }}));

    return function(req, res, next){

        // do stuff with req.session

        next();

    }
}

谁能确认这是一种合乎逻辑的做事方式?是否有理由将cookieParser()andsession方法排除在我的中间件之外?

显然,我在这些示例中使用 Express,但我知道这些方法源自 Connect。

4

1 回答 1

2

我认为您的第一次设置没有任何问题。它相当明确(您也许可以添加一条注释说明my_auth_middleware()依赖于其他两个),因此对于查看您的代码的任何人来说都是非常明显的。

您的第二个示例几乎隐藏了正在使用其他两个中间件的事实。它们还将您的一些应用程序的配置(秘密和 cookie 名称)移动到单独的文件中,这可能会造成混淆。而且我个人不喜欢路过app

FWIW,express.session也需要express.cookieParser工作,但它留给程序员来加载它。

于 2013-06-23T13:21:04.923 回答