読者です 読者をやめる 読者になる 読者になる

ポーカー、プログラミング、もぐ

ポーカーとプログラミングともぐもぐについてのブログ。

Node.js + PostgreSQLを使ってアプリケーションを作る(7) CRUD用APIを作る

目次

1, 環境構築

2, Hello World

3, 設定ファイルの追加

4, ルーティング、コントローラーの追加

5, データベースを使用する

6, ORMを利用する

7, CRUDAPIを作る<-今回

今回やること

CRUDAPIを作り、データの操作をできるようにする

手順

  • 1, 必要なモジュールを追加する body-parserモジュールをインストールし、app.jsに読み込み用コードを追加します。
$ node install --save body-parser
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
  • 2, API用コントローラーを作成する controllers/apiディレクトリを作成し、そこにtask.jsを追加します。
$ mkdir controllers/api
$ vim controllers/api/task.js

controllers/api/task.jsには以下のように記述します。

'use strict';

const Promise        = require('bluebird');
const Task           = require('../../models/task');
const TaskCollection = require('../../collections/taskCollection');

const getTask = function(req, res){
  const id = req.params.id;
  Task.forge({id: id})
    .fetch({columns: ['title', 'description', 'created_at', 'updated_at']})
    .then(function (task){
      res.json(task.toJSON());
    })
    .catch(function (error) {
       res.status(500).json({msg: error.message});
    });
};

const getTasks = function(req, res) {
  TaskCollection.getList()
    .then(function (tasks){
      res.json(tasks);
    })
    .catch (function (error) {
      res.status(500).json({msg: error.message});
    });
};

const postCreate = function(req, res) {
  new Task({
    title      : req.body.title,
    description: req.body.description,
    created_at : new Date().toISOString(),
    updated_at : new Date().toISOString()
  })
  .save()
  .then(function (task){
    res.json(task.id);
  })
  .catch (function(error){
    res.status(500).json({msg: error.message});
  });
};

const deleteDestroy = function(req, res) {
  new Task()
    .where('id', req.params.id)
    .destroy()
    .then(function (task){
      res.json({message: 'success'});
    })
    .catch (function (error) {
      res.status(500).json({msg: error.message});
    });
}

module.exports = {
  getTask      : getTask,
  getTasks     : getTasks,
  postCreate   : postCreate,
  deleteDestroy: deleteDestroy
};
  • 3, ルーティングの設定 routes/apiディレクトリを作成し、そこにtask.jsを作成します。
$ mkdir routes/api
$ vim routes/api/task.js

routes/api/task.jsには以下のように記述します。

'use strict';

const express    = require('express');
const router     = express.Router();
const controller = require('../../controllers/api/task');

router.route('/')
  .get(controller.getTasks);

router.route('/:id')
  .get(controller.getTask);

router.route('/')
  .post(controller.postCreate);

router.route('/:id')
  .delete(controller.deleteDestroy);

module.exports = router;

その後、app.jsにroutes/api/task.jsを利用するようコードを追加します。

const api_task = require('./routes/api/task');
app.use('/api/tasks', api_task);

これで、CRUDAPIが作成できました。 GET http://localhost:3000/api/tasks/ ->task一覧を取得 GET http://localhost:3000/api/tasks/id ->特定のidのtaskを取得 POST http://localhost:3000/api/tasks/ ->taskを作成 DELETE https://localhost:3000/api/tasks/id ->特定のidのtaskを削除

ここまでのコードは

github.com

こちらに公開してあります。