Quantcast
Viewing all articles
Browse latest Browse all 8695

【node.js】bookshelfとknexを使ってCRUD操作

expressを使ったbookshelfの操作方法について書かれております。

Bookshelfとは

SQLを使わずデータベースを使うことができるORM

Bookshelfは、 Knex SQLクエリビルダー上に構築されたNode.js用のJavaScript ORMです。 Promiseベースのコールバックインターフェイスと従来のコールバックインターフェイスの両方、トランザクションサポート、eager / nested-eagerリレーションのロード、ポリモーフィックな関連付け、1対1、1対多、および多対多のリレーションのサポートを備えています。
PostgreSQL、MySQL、SQLite3で動作するように設計されています。

knexとは

Bookshelfは、内部で「クエリービルダー」と呼ばれるknexモジュールを利用しています。ですから、インストールの際には、まずknexを入れておく必要があります。

良く分からないけど、Bookshelfを使う際にはついてくる物らしい。。。

モジュールのインストール

npm install--save knex
npm install--save bookshelf

Bookshelfの初期設定

varknex=require('knex')({client:'mysql',connection:{host:'127.0.0.1',user:'root',password:'',database:'データベース名',charset:'utf8'}});varBookshelf=require('bookshelf')(knex);varMydata=Bookshelf.Model.extend({tableName:'Mydata(テーブル名)'});

上記のコードで行っている事は、
knexのロード、
knexの初期設定、
Bookshelfのロード、
モデルの作成

モデルとは?

テーブルにアクセスするオブジェクトです。
これを使って、テーブルのデータをCRUD操作します。

モデルの項目追加

hasTimestamps:trueタイムスタンプのデータをレコードに追加する
user: function() {return this.belongsTo(テーブル名)他のテーブルの値を取得可能にする

これでBookshelfの初期設定は完了しました。
いよいよ、CRUD操作をしていきます。

Bookshelfのメソッド

Bookshelfで操作する際に使用するメソッドです。使いながら覚えていきましょう。

fetchAll全てのレコードを取得する物
thenデータベースアクセス完了後の処理をコールバック関数として設定します。
catchthenを実行した時にエラーが発生した時の処理です。
saveオブジェクトの引数をテーブルに保存する処理をします。
where検索する対象に条件を設定して絞り込む
fetch最初の一つだけレコードを取り出す。
fetchPage得られたページ番号を元にレコードを取り出します。
orderByレコードを並べ変える。
query複数項目をチェックすする

レコードを取り出す

全レコードを取り出す

newMydata().fetchAll().then((collection)=>{-----取得できた場合の処理-----}).catch((err)=>{-----エラー発生時の処理-----});

レコードを保存する

新しいレコードの追加をしていきます。

router.post('/add',(req,res,next)=>{newMydata(req.body).save().then((model)=>{ー追加した後の操作ー});});

検索

router.post('/',(req,res,next)=>{nexMydata().where('id','=',req.body.fstr).fetch().then((collection)=>{取得後の操作}}

レコードを並べかえる

router.get('/:page',(req,res,next)=>{nexMessage().orderBy('created_at','DESC').fetchAll().then((collection)=>{取得後の操作});})

orderByについて

第一引数にフィールド名、第二引数には「ABC」「DESC」の何かを指定します。
(DESCなら降順、ABCなら逆順)

複数項目をチェックする

router.post('/',(req,res,next)=>{varnm=req.body.name;varpw=req.body.password;Mydata.query({where:{name:nm},andWhere:{password:pw}}).fetch().then((model)=>{取得後の操作}}

関数query()に関して

where:{name: nm}nameの値が変数nmである
andWhere:{password: pw}それに加えて、passwordの値が変数pwである

ページネーション

Bookshelfを使う事で、ページネーションも使えるようになります。

router.get('/:page',(req,res,next)=>{varpg=req.params.page;pg*=1;if(pg<1){pg=1;}newMyData().fetchPage({page:pg,pageSize:3}).then((collection)=>{取得した後の操作}).catch((err)=>{エラーを取得した後の操作}}

関数.fetchPageに関して

page現在のページ番号
pageCountページ数(最後のページのページ番号)
pageSize1ページ辺りのレコード数
rawCountレコードの総数

参考

node.js超入門第2版

Bookshelfとは
https://bookshelfjs.org/

paginationプラグイン
https://github.com/bookshelf/bookshelf/wiki/Plugin:-Pagination


Viewing all articles
Browse latest Browse all 8695

Trending Articles