使用Express js编写一个简单的NodeJS Web服务。我以前是个蟒蛇人。
在像Django或Flask这样的框架中,通常看到Python装饰器只用于在特定端点上实现插件的逻辑。这里可以看到这种模式的一个例子。
http://pythonhosted.org/Flask-Classy/#using-multiple-routes-for-a-single-view
我正在研究Express中间件,并且使用app.use
3奇偶校验函数使一切运行良好,但这仅适用于每个请求的逻辑执行。我想允许插件的最终用户仅在特定端点上运行我的逻辑包(已经在单独的函数中),类似于上面源中概述的模式。
这些包装器的一些配置将在app start处传递。
最好的方法是什么?我应该使用将实际路由处理程序作为参数并在结束时返回的函数来模拟此模式吗?像这样的东西?
function pluginWrapper(endptFunc){
//plugin logic here
return endptFunc;
}
app.get('/endpt', pluginWrapper(function(req,res,next){
//endpt logic here
res.end()
}));
答案 0 :(得分:11)
以下是明确的惯用策略:
app.use(express.cookieParser())
app.post('/users', express.bodyParser(), createUser)
。这是我认为最符合上述情况的模式app.get('/books', [paginate, queryLimit, memoize], getBooks)
。当然,该列表可以是变量或模块,因此以干燥的方式共享。app.param
:app.get('/:username/hobbies', getHobbies)
为了更直接地解决您的问题,我认为您不应该尝试将python decorator模式1对1移植到javascript。中间件基本上完成了同样的事情。如果你使用装饰器发布具体的例子,我们可以建议一种惯用的方式来实现它们。