Express中间件进行异步调用

时间:2016-03-24 06:47:51

标签: node.js express analytics middleware snowplow

我们有一个NodeJS Express应用程序,我们已经实现了自定义分析后端。现在,我们正在决定如何为功能手机等禁用JS的浏览器实现跟踪机制。

我们正在考虑的一种设计方法是创建一个中间件,拦截每个请求,从请求/上下文中提取params并将它们发送到后端。这是非常可扩展的,对于像我们这样的自定义分析解决方案非常有意义。

另一种方法是创建像Google分析一样的跟踪像素,然后从中提取数据。但对于自定义跟踪解决方案来说,这似乎是一个不那么可扩展的解决方案,因为与GA不同,params和数据结构可以随时改变或扩展。

我的问题是 - 制作一个制作异步请求的中间件是否有任何反面?在创建它时是否有任何我们需要认识的东西,因为对我们的服务器的每个请求都将通过这个中间件?我们是一个相当大的应用程序,每分钟流量达数十万。

1 个答案:

答案 0 :(得分:4)

只要您保持中间件异步并在必要时调用next()方法,您应该没问题。如果为其配置了服务器实例,Express可以处理相当多的负载。

真正的问题是当你开始做同步方法时,你可以/应该利用promises来正确处理它们的分辨率。

PROTIP:尽可能避免中间件/控制器逻辑中的嵌套承诺解析。使用类似Bluebird的.all()方法,这样你就不会浪费处理阻塞请求的时间,如果你必须发出顺序回调,请考虑异步瀑布或异步系列(取决于你选择的promise库),这将允许你如果依赖于先前信息,则依次运行您的承诺解决方案。帮助您保持代码清洁。