0

我有一些菜单,例如:

<a href="/dashboard">Dashboard</a>
<a href="/list-book">List Table</a>
<a href="/book/category/">Category</a>
<a href="/book/detail/">Detail</a>

我想创建查看次数最多的快速操作下拉菜单。我的jQuery:

var mySession = window.sessionStorage, pageCount;
        window.addEventListener('load', function(){
           if(!mySession.getItem("pageCount")){
              mySession.setItem('pageCount', 1);
           } else {
              pageCount = mySession.getItem("pageCount");
              pageCount = parseInt(pageCount) + 1;
              mySession.setItem('pageCount', pageCount );
           }
           console.log('page view count of current browsing session', mySession.getItem("pageCount"));
           var x = pageCount;
           console.log(x)

           $.ajax({
              type: 'POST',
              url: '/dashboard',
              data: {"count":x},
              complete: function(r){
            alert("success");
            }

            });
        });

我的后端:

get "/dashboard" do |env|
render "views/dashboard.ecr"
end

post "/dashboard" do |env|

body = env.params.body
spawn do
data = {
  "page"  => "dashboard",
  "count" => body["count"],
  "user" => "admin",
}

check_page = DB1["page_count"].find_one({"page" => "dashboard"})
if check_page
  DB1["page_count"].update({"page" => "dashboard"},
    {
      "$set" => {"count" => body["count"]},
    })
else
  DB1["page_count"].insert(data)
end
  end
env.redirect "/dashboard"
end

但是,这种方式计算所有页面。我将计算每页的页面,每个页面都是用户点击的。可以帮我。

4

1 回答 1

1

我会这样做:

  1. 打开页面,用户向应用程序 -> 路由(例如“/dashboard”)发出 GET 请求,因此,我们可以假设一个请求为仪表板页面计数 +1。

  2. 在 MongoDB 中,您使用两个键创建集合:page_namelike dashboard_views_count(用于商店页面名称)和views(用于增加视图计数),然后您需要学习 MongoDB 中的运算符$inc。这将提供一种增加计数器的简单方法。

  3. 之后,我们为捕获请求制作中间件。它有助于从 env 页面路径中提取并写入 MongoDB。

结果将是这样的:

  1. 用户打开'/dashboard'
  2. 中间件捕获此请求并从 env 中提取页面名称
  3. 中间件将页面名称和 +1 写入 MongoDB

PS 而不是 Mongo,我建议考虑 Redis 作为专柜商店。

于 2018-09-28T13:59:56.827 回答