从Python框架expressionJS装饰器模式的等价物

使用Express js编写一个简单的NodeJS webservice。 我历史上是一个python人。

在像Django或Flask这样的框架中,通常只能在特定的端点上看到Python装饰器用于从插件实现逻辑。 这种模式的例子可以在这里看到。

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

我正在使用Express中间件,并且使用3-parity函数可以很好地工作,但是这仅与每个请求的逻辑执行相关。 我希望允许插件的最终用户仅在特定端点上运行我的逻辑(已经在单独的函数中)的包裹,类似于上面源代码中概述的模式。

这些包装器的一些configuration将在应用程序启动时传递。

最好的办法是什么? 我是否应该用实际路由处理器作为参数来模拟这种模式,并在最后返回? 像这样的东西?

 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) 。 当然,这个列表可能是一个variables或模块,因此以DRY的方式共享。
  4. 通常由path中的模式触发的function可以使用app.paramapp.get('/:username/hobbies', getHobbies)
  5. 现有的常规function可以打包到中间件中,以适应中间件API。
  6. 你可以像平常一样调用函数。 并不是每一个代码重用的方法都必须被强制为快捷方式之一。

要更直接地解决你的问题,我不认为你应该尝试移植python装饰模式1对1的JavaScript。 中间件完成本质上相同的事情。 如果你使用装饰器发布具体的例子,我们可以build议一个惯用的方式来实现它们的expression。