我们有一个NodeJS Express应用程序,我们为其实现了自定义分析后端。现在,我们正在决定如何实现跟踪机制,针对功能手机等禁用JS的浏览器。
我们正在考虑的一种设计方法是创建一个中间件,它拦截每个请求,从请求/上下文中提取params并将其发送到后端。这是非常可扩展的,对于像我们这样的自定义分析解决方案来说非常有意义。
另一种方法是像谷歌分析一样创建一个跟踪像素,然后从中提取数据。但对于自定义跟踪解决方案来说,这似乎是一个不太可扩展的解决方案,因为参数和数据结构可能在任何时候发生变化或扩展,而不像GA。
我的问题是,制作一个可以发出异步请求的中间件有什么好处吗?在创建它时,我们需要了解什么吗?因为对服务器的每个请求都将通过这个中间件?我们的应用程序相当大,每分钟的流量高达数十万。
只要保持中间件异步,并在必要时调用next()
方法,就可以了。Express可以处理相当多的负载,前提是您的服务器实例已配置。
真正的问题是当您开始执行同步方法时,您可以/应该使用promise来正确处理它们的解决方案。
PROTIP:在中间件/控制器逻辑中尽可能避免嵌套的promise解析。使用类似Bluebird的.all()
方法,这样您就不会在阻塞请求上浪费处理时间,如果您必须发出顺序回调,请考虑异步瀑布或异步系列(取决于您选择的promise库),如果它们依赖于先前的信息,则它将允许您按顺序运行promise解析。有助于保持代码的整洁。