gpt4 book ai didi

node.js - 在自定义中间件中使用 Connect\Express 中间件

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:01 25 4
gpt4 key购买 nike

在您的自定义中间件中使用流行的 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。

最佳答案

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

您的第二个示例几乎掩盖了正在使用其他两个中间件的事实。他们还将一些应用程序的配置( secret 和 cookie 名称)移动到一个单独的文件中,这可能会令人困惑。就我个人而言,我不喜欢传递app

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

关于node.js - 在自定义中间件中使用 Connect\Express 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com