2016-09-03 7 views
1

私はいくつかのカテゴリ(ビジネス、エンターテインメント、スポーツなど)を持つニュースサイトを持っています。フロントページには人気のある記事のリストを表示したいデータベース内のすべての記事から。エクスプレスでページのビュー数を追加して保存する方法

これを行うには、どの記事が人気があるのか​​、最もよく閲覧されているのかを知る必要があるため、各記事に閲覧回数を入れる必要があります。

記事をクリックしたときにidでapi requestを呼び出して記事のデータを取得しています。つまり、IDごとにいくつのapi呼び出しが行われたかをカウントするだけです。

私はreactとreduxをサーバで使用し、postgresqlはデータベースにknexとbookshelfを使用しています。 これは急行の​​資料を取得するための私のコードです:

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

私はこれにビューまたは要求カウントを追加することができますどのように?または他の方法ですか?本棚は、それを使用するため、あなたは、knexクエリビルダに頼ることができ

+0

knexがあるので、アクセスをカウントする目的だけのテーブルを更新するknex.rawを発行することができます。 somethig like knex.raw( "記事の更新セットartcount = artcount + 1 where article_id =:id"、{id:req.params.id}) – Sombriks

+1

@Sombriksコメントありがとうございました!あなたはコードで答えのセクションにこれを書くことができますか? table.integer( 'viewCount')のような行を追加する必要がありますか?そして何?すみません、私はknexの新人です – Dan

答えて

1

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})) 
    }) 
}) 

あなたが必要とするすべてはビルダーあなたのルータ上であなたはモデルを必要と同じように()を要求することです。

bookshelf docsはクエリビルダーの上にありますが、モデルを公開する(つまりエクスポートする)のと同じ方法で公開するか、またはbookshelfマッパーを使用して公開する必要があります。

また、knex migrationsを使用している場合は、knexfile.js設定ファイルが必要です。

+0

私はこれを試しましたが、うまくいきませんでした。あなたはビルダーによって何を意味していますか?それはknex.schema.createTableを使って作成したテーブルですか?このknex( 'articles')のようなインクリメントメソッドを使うことはできますか?(id:req.params.id).increment( 'viewCount'、1)? – Dan

+0

こんにちはダン、私は "ビルダー"と言うとき、それはクエリビルダーなので、 "knex"を意味します。私が提供したサンプルは、あなたがすでに提供しているコードに基づいて構築された単なる例です。つまり、articleviewはアーティクルIDとビューカウントを格納するテーブルです。これは "artcount"という名前です。しかし、このテーブルをどのように呼び出すかはあなた次第です。また、私はhttp://knexjs.orgドキュメントを見てきましたが、 ".increment()"メソッドはないので、 ".raw()"メソッドがうまく機能します。 doublが残っている場合は、私にgithubサンプルレポを提供し、私はいくつかの例をPRします。 – Sombriks

+1

ありがとうございました!今あなたが言っていることを理解していますが、私はこれを見つけました:[インクリメント方法](http://knexjs.org/#Builder-increment)。 – Dan

関連する問題