与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()
}));
以下是明确的惯用策略:
整个站点中大部分请求所涉及的事情都变成了正常的连接中间件: 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。中间件实质上完成了同一件事。如果您使用装饰器发布具体示例,我们可以建议一种惯用的方式来快速实现它们。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。