表示进行asynchronous调用的中间件

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

我们正在考虑的一种devise方法是创build一个中间件,拦截每个请求,从请求/上下文中提取参数并将它们发送到后端。 这是非常可扩展的,对于像我们这样的定制分析解决scheme来说非常合理。

另一种方法是创build一个像谷歌分析那样的跟踪像素,然后从中提取数据。 但是,这似乎是一个定制跟踪解决scheme的可扩展性更小的解决scheme,因为参数和数据结构可以随时改变或放大,不像GA。

我的问题是这样的 – 是否有任何其他的方面,使中间件,使asynchronous请求? 在创build服务器时,我们需要了解什么,因为对服务器的每个请求都要通过这个中间件? 我们是一个相当大的应用程序,每分钟几十万的stream量。

只要你保持你的中间件asynchronous,并在需要时调用next()方法,你应该没问题。 Express可以处理相当多的负载,只要你的服务器实例被configuration好了。

真正的问题是当你开始做同步方法,你可以/应该使用承诺来正确处理他们的决议。

PROTIP:在中间件/控制器逻辑中尽可能地避免嵌套承诺解决scheme。 使用像Bluebird的.all()方法,所以你不会浪费处理时间阻止请求,如果你必须发出顺序callback,可以考虑asynchronous瀑布或asynchronous系列(取决于你select的承诺库),这将允许你如果它们依赖于先前的信息,则依次运行您的承诺解决scheme 有助于保持您的代码清洁。