从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() }));
这里是明确的惯用策略:
- 整个站点的大部分请求的事情都会成为正常的连接中间件:
app.use(express.cookieParser())
-
app.post('/users', express.bodyParser(), createUser)
只针对某个特定的路由而定。 这是我认为最符合上述情况的模式 - 相关中间件组可以作为列表传递:
app.get('/books', [paginate, queryLimit, memoize], getBooks)
。 当然,这个列表可能是一个variables或模块,因此以DRY的方式共享。 - 通常由path中的模式触发的function可以使用
app.param
:app.get('/:username/hobbies', getHobbies)
- 现有的常规function可以打包到中间件中,以适应中间件API。
- 你可以像平常一样调用函数。 并不是每一个代码重用的方法都必须被强制为快捷方式之一。
要更直接地解决你的问题,我不认为你应该尝试移植python装饰模式1对1的JavaScript。 中间件完成本质上相同的事情。 如果你使用装饰器发布具体的例子,我们可以build议一个惯用的方式来实现它们的expression。
- 来自node.js的MongoDB查询(express-coffeescript-mongodb)
- Fullcalendar Angular / Node.JS http请求:TypeError:将循环结构转换为JSON(在Object.stringify处)
- Express:查询是否存在文档
- nodejs express – 大块在res.on('data')中logging两次
- 在Ubuntu 11.04上的Node.js和Express
- 如何用可选的快速查询参数编写Mongoose查询?
- 连接build立后如何运行JavaScript代码?
- 使用mongoose更新mongo中的二级数组返回Unexpected token“。”
- 使用Webpack构build后端Express / WS Node应用程序时的警告