Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在express中添加和存储页面的视图计数_Express_Reactjs_Bookshelf.js_Knex.js - Fatal编程技术网

如何在express中添加和存储页面的视图计数

如何在express中添加和存储页面的视图计数,express,reactjs,bookshelf.js,knex.js,Express,Reactjs,Bookshelf.js,Knex.js,我有一个新闻网站,有一些类别(商业、娱乐、体育等),我想在首页显示数据库中所有文章的热门文章列表 为了做到这一点,我必须知道哪篇文章最受欢迎或浏览量最大,所以我需要对每篇文章进行浏览(访问)计数 当点击一篇文章时,我通过使用其id调用api请求来获取文章的数据,那么这是否意味着我所要做的就是计算每个id的api调用次数 我在客户端使用react和redux,在服务器上使用express,在数据库中使用带有knex和bookshelf的postgresql。 这是我在express中获取文章的代码

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

为了做到这一点,我必须知道哪篇文章最受欢迎或浏览量最大,所以我需要对每篇文章进行浏览(访问)计数

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

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

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

如何将视图或请求计数添加到该列表中?或者其他方式?

您可以依赖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}))
   })
})
您所需要的只是在路由器上要求()以与要求模型相同的方式使用生成器

用户只需使用查询生成器,但您所需要的只是以与您可以公开模型(即导出模型)相同的方式公开他,或者通过映射器访问模型


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

因为您有knex,所以可以发出knex.raw更新表,该表的唯一目的是计算访问次数。像knex.raw(“更新articleview set artcount=artcount+1其中article_id=:id”,{id:req.params.id})之类的东西@Sombriks谢谢你的评论!你能用代码把这个写在答案部分吗?我应该添加一个类似于table.integer('viewCount')的行吗?然后呢?对不起,我是新来的knexI尝试了这个,但它不起作用。你说的建筑商是什么意思?它是我使用knex.schema.createTable创建的表吗?我可以使用像knex('articles')这样的增量方法吗?where(id:req.params.id)。increment('viewCount',1)?嗨,丹,我说的“builder”是指“knex”,因为它是一个查询生成器。我提供的示例只是基于您已经提供的代码构建的示例。也就是说,articleview是一个存储文章id和viewcount的表,我将其命名为“artcount”。然而,如何称呼这张桌子取决于你自己。另外,我已经查看了文档,没有“.increment()”方法,因此“.raw()”方法可以很好地为您服务。如果还剩下任何doubl,请提供github回购示例,我将提供一些示例。谢谢!现在我明白你的意思了,但我发现了这个:。