提问者:小点点

在Node中,用户每次访问站点时运行一次的正确方式是什么?


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

我目前使用一个中间件来完成这一工作,该中间件检查req.headers.referer,如果用户不是来自我的某个页面,则更新Mongo。 这导致我对app.get的几乎每个实例都进行了添加。 这是可行的,但我不知道这是不是正确的解决方案。

我担心的是-

>

  • 看起来开始乱七八糟了。 我觉得我正滑向中间件地狱,几乎每一条路由都需要我添加的每一个中间件。 很多重复的电话。 很多看起来很像的代码。

    效率高吗? 我知道每个请求只会调用它一次,所以我关心的确实是上面提到的。 在用户得到响应之前,我正在开始一个会导致中间件长链的事情?

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


  • 共1个答案

    匿名用户

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

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

    关于性能--是的,这将为每个请求运行,但只要您确保没有阻塞updateStatistics()内部的事件循环,它就不应该是什么大问题。