Node.js + PostgreSQLを使ってアプリケーションを作る(7) CRUD用APIを作る
目次
今回やること
手順
- 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}));
$ 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 };
$ 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);
これで、CRUD用APIが作成できました。 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を削除
ここまでのコードは
こちらに公開してあります。