【问题标题】:How to add and store view count for a page in express如何在快递中添加和存储页面的查看次数
【发布时间】:2016-09-03 07:18:57
【问题描述】:

我有一个包含一些类别(商业、娱乐、体育等)的新闻网站,我想在首页显示数据库中所有文章中的热门文章列表。

为了做到这一点,我必须知道哪篇文章最受欢迎或观看次数最多,所以我需要对每篇文章进行查看(访问)计数。

当文章被点击时,我通过使用其 id 调用 api 请求来获取文章的数据,那么这是否意味着我所要做的就是计算每个 id 进行了多少次 api 调用?

我在客户端使用 react 和 redux,在服务器中使用 express,在数据库中使用带有 knex 和 bookshelf 的 postgresql。 这是我在快递中获取文章的代码:

router.get('/:id', (req, res) => {
   Article.query({
      where: {id: req.params.id}
   }).fetch().then(article => {
      res.json(article)
   })
})

如何添加查看或请求计数?还是其他方式?

【问题讨论】:

  • 因为您有 knex,您可以发出 knex.raw 更新表,其唯一目的是计算访问。类似 knex.raw("update articleview set artcount = artcount + 1 where article_id = :id",{id:req.params.id})
  • @Sombriks 感谢您的评论!你能用代码在答案部分写这个吗?我应该添加一个看起来像 table.integer('viewCount') 的行吗?然后什么?抱歉,我是 knex 的新手

标签: express reactjs bookshelf.js knex.js


【解决方案1】:

您可以依赖 knex 查询生成器,因为 Bookshelf 使用它:

router.get('/:id', (req, res) => {
   Article.query({
      where: {id: req.params.id}
   }).fetch().then(article => {
      res.json(article)
   }).then(ret => {
      return knex.raw("update articleview set artcount = artcount + 1 where article_id = :id",{id:req.params.id}))
   })
})

您所需要的只是在您的路由器上以与您需要模型相同的方式在构建器上 require()。

bookshelf docs 仅适用于查询构建器,但您只需像公开模型(即导出模型)或通过 bookshelf 映射器访问它一样公开他。

另外,如果您使用knex migrations,您可以要求 knexfile.js 配置文件。

【讨论】:

  • 我试过这个,但没有用。建设者是什么意思?它是我使用 knex.schema.createTable 创建的表吗?我可以只使用像这样的增量方法 knex('articles').where(id: req.params.id).increment('viewCount', 1)?
  • 嗨,丹,当我说“builder”时,我的意思是“knex”,因为它是一个查询构建器。我提供的示例只是基于您已经提供的代码构建的示例。也就是说,articleview 是一个存储文章 id 和 viewcount 的表,我将其命名为“artcount”。但是,您将如何调用此表取决于您。另外,我查看了knexjs.org 文档,没有“.increment()”方法,所以“.raw()”方法可以很好地为您服务。如果还有任何问题,请提供给我一个 github 示例 repo,我会 PR 一些示例。
  • 谢谢!现在我明白你在说什么,但我发现了这个:increment method
猜你喜欢
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多