コンパイラかく語りき

import { Fun } from 'programming'

Thinkyを使ったRethinkDB REST API

メモ。 参考にした動画:A Simple REST API with Express, RethinkDB, and Thinky

下準備

セットアップ

thinkyをrequireする時に、セットアップ情報をオブジェクトで渡して実行する。

const thinky = require('thinky')({
  host: 'localhost',
  port: 28015,
  db: 'People'
})

RethinkDBドライバへの参照

thinkyにはrethinkDBへの参照が紐付いているので、変数格納しておく。

const r = thinky.r

モデルの作成

thinky.createModel(‘TableName’, {schema})

const People = thinky.createModel('People', {
  firstName: String,
  lastName: String,
  coolnessFactor: Number,
  date: { _type: Date, default: r.now() }
})

thinky/#createmodel

インデックス作成

dateカラムがインデックスに適しているかどうかはさておき…

People.ensureIndex('date')

model/#ensureindex

REST API

get

const get = function (req, res) {
  People.get(req.params.id).run().then((person) => {
    res.json(person)
  }).error((err) => {
    res.json({ message: err })
  })
}

getAll

const getAll = function (req, res) {
  People.orderBy({ index: r.desc('date') }).run().then((people) => {
    res.json(people)
  }).error((err) => {
    res.json({ message: err })
  })
}

add

const add = function (req, res) {
  var person = new People(req.body)
  person.save().then((result) => {
    res.json(result)
  }).error((err) => {
    res.json({ message: err })
  })
}

delete

const delete = function (req, res) {
  People.get(req.params.id).run().then((person) => {
    person.delete().then((result) => {
      res.json(result)
    }).error((err) => {
      res.json({ message: err })
    })
  }).error((err) => {
    res.json({ message: err })
  })
}

update

const update = function (req, res) {
  People.get(req.params.id).run().then((person) => {
    if(req.body.firstName) {
      person.firstName = req.body.firstName
    }
  
    if(req.body.lastName) {
      person.lastName = req.body.lastName
    }
    
    if(req.body.coolnessFactor) {
      person.coolnessFactor = parseInt(req.body.coolnessFactor)
    }
    person.data = r.now()
    
    person.save().then((result) => {
      res.json(result)
    }).error((err) => {
      res.json({ message: err})
    })
  })
}

あとは、expressなりなんなりでrouteしてあげれば動きます。