node.js - 进行异步调用的 Express 中间件

标签 node.js express analytics middleware snowplow

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

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

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

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

最佳答案

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

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

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

关于node.js - 进行异步调用的 Express 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36194584/

相关文章:

string - 从nodejs中的字符串调用函数

javascript - 从带有 ids 数组的 url 中删除括号 (Request.js)

javascript - 通过关联对插入数据进行序列化

javascript - 第三方 JavaScript 小部件的分析

cookies - _gat (Google Analytics) cookie 的用途是什么?

node.js - 带有字符串而不是数组的nodejs spawn命令?

python - 使用 Node js 快速服务器调用 python 脚本

node.js - 在 Nightmare.js 中发送 keydown、keypress 类型

javascript - 使用 $addToSet 添加到 MongoDB 中的数组

android - 为什么实现Google Analytics时没有创建R.xml文件资源?