【问题标题】:Express middleware that makes Asynchronous calls进行异步调用的 Express 中间件
【发布时间】:2016-07-11 17:06:26
【问题描述】:

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

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

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

我的问题是 - 制作发出异步请求的中间件是否有任何反面?在创建它时我们需要注意什么,因为对我们服务器的每个请求都将通过这个中间件?我们的是一个比较大的应用,每分钟流量几十万。

【问题讨论】:

  • Node.js 完全异步有什么问题?问题可能是如果你同步一些东西,但是当你保持一切异步时没问题。

标签: node.js express analytics middleware snowplow


【解决方案1】:

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

真正的问题是当您开始使用同步方法时,您可以/应该利用 Promise 来正确处理它们的解决方案。

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

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2014-05-08
    相关资源
    最近更新 更多