【问题标题】:Using Connect\Express middleware within custom middleware在自定义中间件中使用 Connect\Express 中间件
【发布时间】:2013-06-23 21:21:04
【问题描述】:

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

例如,我正在编写一些身份验证中间件,这显然非常依赖 Connect 的 cookieParser()session 方法。这些方法是中间件,因此需要传递requestresponsenext 参数。显而易见的选择是在添加身份验证中间件之前确保将它们添加到中间件堆栈,如下所示:

app.js:

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

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

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

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()session 方法排除在我的中间件之外?

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

【问题讨论】:

    标签: node.js express connect


    【解决方案1】:

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

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

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

    【讨论】:

    • 想在接受之前稍等片刻,看看这是否引发了争论。看起来没有人有什么要补充的,所以我会接受。干杯。
    猜你喜欢
    • 2021-12-21
    • 2021-06-30
    • 2020-02-01
    • 1970-01-01
    • 2012-06-08
    • 2013-08-22
    • 2012-02-21
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多