开发者社区> 问答> 正文

Express JS等效于Python框架的装饰器模式

与Express js一起编写简单的NodeJS Web服务。我历史上是一个蟒蛇人。

在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()
  }));

展开
收起
祖安文状元 2020-02-23 15:41:29 1133 0
1 条回答
写回答
取消 提交回答
  • 以下是明确的惯用策略:

    整个站点中大部分请求所涉及的事情都变成了正常的连接中间件: app.use(express.cookieParser()) 仅针对特定路线的事物可以在该路线上进行:app.post('/users', express.bodyParser(), createUser)。我认为这是最符合您上述情况的模式 相关中间件组可以作为列表传递:app.get('/books', [paginate, queryLimit, memoize], getBooks)。当然,该列表可以是变量或模块,因此可以DRY方式共享。 路径本身中的模式触发的常见功能可以使用app.param:app.get('/:username/hobbies', getHobbies) 现有的常规功能可以包装到中间件中,以使其适应中间件API。 您可以正常调用函数。并非每种代码重用方法都必须扎入express的便捷模式之一。 为了更直接地解决您的问题,我认为您不应该尝试将python装饰器模式1对1移植到javascript。中间件实质上完成了同一件事。如果您使用装饰器发布具体示例,我们可以建议一种惯用的方式来快速实现它们。

    2020-02-23 15:41:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载