gpt4 book ai didi

node.js - Express JS 相当于 Python 框架中的装饰器模式

转载 作者:IT老高 更新时间:2023-10-28 23:25:00 30 4
gpt4 key购买 nike

使用 Express js 编写一个简单的 NodeJS 网络服务。我以前是个 python 人。

在 Django 或 Flask 等框架中,通常会看到 Python 装饰器用于仅在特定端点上实现来自插件的逻辑。可以在此处查看此模式的示例。

http://pythonhosted.org/Flask-Classy/#using-multiple-routes-for-a-single-view

我正在开发一个 Express 中间件,并且使用 app.use 3-parity 函数使一切正常,但这仅与每个请求的逻辑执行有关。我想允许插件的最终用户仅在类似于上面源代码中概述的模式的特定端点上运行我的逻辑包(已经在单独的函数中)。

这些包装器的一些配置将在应用启动时传递。

最好的方法是什么?我应该使用将实际路由处理程序作为参数并在最后返回它的函数来模拟这种模式吗?像这样?

function pluginWrapper(endptFunc){
//plugin logic here
return endptFunc;
}

app.get('/endpt', pluginWrapper(function(req,res,next){
//endpt logic here
res.end()
}));

最佳答案

这里是表达的惯用策略:

  1. 与整个站点的大多数请求相关的东西变成了正常的连接中间件:app.use(express.cookieParser())
  2. 与特定路线相关的事情可以只在该路线上进行:app.post('/users', express.bodyParser(), createUser)。这是我认为最符合您上述情况的模式
  3. 相关中间件组可以作为列表传递:app.get('/books', [paginate, queryLimit, memoize], getBooks)。当然,该列表可以是变量或模块,因此以 DRY 方式共享。
  4. 由路径本身的模式触发的常用功能可以使用app.param:app.get('/:username/hobbies', getHobbies)
  5. 可以将现有的常规函数​​包装到中间件中,以使其适应中间件 API。
  6. 您可以照常调用函数。并非每种代码重用方法都必须硬塞到 express 的一种方便模式中。

为了更直接地解决您的问题,我认为您不应该尝试将 python 装饰器模式 1 对 1 移植到 javascript。中间件基本上完成了同样的事情。如果您使用装饰器发布具体示例,我们可以建议一种惯用的方式在 express 中实现它们。

关于node.js - Express JS 相当于 Python 框架中的装饰器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19816038/

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