当前位置: 首页 > 知识库问答 >
问题:

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

慕祯
2023-03-14

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

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

我担心的是-

>

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

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

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

  • 共有1个答案

    诸葛绍元
    2023-03-14

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

    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()内部的事件循环,它就不应该是什么大问题。

     类似资料:
    • 问题内容: 我正在使用node-cron运行计划的作业。我希望作业每隔45分钟运行一次,但操作却很奇怪 这是我正在使用的模式 我的脚本开始于 这是工作执行的前两次 这绝对不是我期望或想要的。我想要的是每45分钟运行一次Jobs。有人可以帮我这个图案吗?谢谢 :) 问题答案: 您可能正在寻找 范围在这里。 秒:0-59 分钟:0-59 时间:0-23 每月的日期:1-31 月:0-11 星期几:0-

    • 我的Android GCM实现有一个奇怪的问题。 它仍然显示通知,但Android是自己做的。它没有设置适当的通知图标(它只是使用Android股票ic_launcher图标)。 知道我做错了什么吗?我如何保证我能自行处理每一份通知书?

    • 在我问之前,Cron作业和任务调度程序将是我的最后选择,这个脚本将在Windows和Linux中使用,我更喜欢有一个编码的方法来完成这个任务,而不是把它留给最终用户来完成。 有没有Python的库可以用来安排任务?我需要每小时运行一次函数,但是,随着时间的推移,如果我每小时运行一次脚本并使用. chat,“每小时一次”将在不同的时间运行由于执行/运行脚本和/或函数固有的延迟,一小时与前一天不同。

    • 本文向大家介绍ASP.NET网站第一次访问慢的解决方法,包括了ASP.NET网站第一次访问慢的解决方法的使用技巧和注意事项,需要的朋友参考一下 本篇经验以IIS8,Windows Server 2012R2做为案例。 IIS8 运行在Windows Server 2012 and Windows 8 版本以上的平台上。 IIS中应用程序池和网站是单独存在的,但是网站运行必须建立在对应的应用程序池启

    • 我尝试在每次创建活动时运行以下线程。它第一次工作,但如果我按下后退按钮并尝试再次导航到活动,它总是崩溃第二次。我怎样才能确保这个线程每次都运行成功呢?

    • 第一次运行flutter程序,这是什么问题? 修改FLUTTER_STORAGE_BASE_URL还是提示这

    • 问题内容: 我想创建一个运行多个轻线程的程序,但将其自身限制为恒定的,预定义数量的并发运行任务,如下所示(但不存在竞争条件的风险): 最安全/最快的方法是什么? 问题答案: 听起来您想用8个工人实现生产者/消费者模式。Python为此提供了一个类,它是线程安全的。 每个工作人员都应调用队列以检索任务。如果没有可用的任务,此调用将阻塞,从而导致工作人员空闲直到可用。然后,工作人员应执行任务,最后在队