在 Node 中,每次用户访问网站时运行一次内容的正确方法是什么?



我应该说这纯粹是一个统计问题,需要99%的准确率和方向正确。换句话说,有一点犯错的余地。

我目前正在使用一个中间件来检查 req.headers.referer 并在用户不是来自我的一个页面时更新 Mongo。这导致我对 app.get 的几乎每个实例都进行了添加。它有效,但我不知道这是否是正确的解决方案。

这是我的担忧——

  1. 它开始看起来很乱。我觉得我正处在中间件地狱的滑坡上,几乎我添加的每一件中间件几乎每条路线都需要。很多重复的电话。很多看起来相同的代码。

  2. 效率高吗?我知道每个请求只会调用一次,所以我的担忧确实与上述有关。我是否开始了一些事情,这将在用户获得响应之前导致一长串中间件?

(我是Node,Express和Mongo的新手,所以如果你想知道为什么我没有做一些明显的事情,这可能就是原因(

不必将中间件添加到每个路由中,您可以将此中间件定义为针对每个请求执行的应用程序级中间件。在中间件中,您可以过滤掉它不应该运行的几个路由:

const excludedPathsForStatistics = ['/your/exlcude-paths-here'];
const yourStatisticMiddleware = function(req, res, next) {
if(!excludedPathsForStatistics.some(path => path === req.path) {
YourStatisticService.updateStatistics(req);
}
next();
}
app.use(yourStatisticMiddleware);

关于性能 - 是的,这将针对每个请求运行,但只要您确保没有阻塞updateStatistics()中的事件循环,这应该没什么大不了的。

最新更新