ExpressでMongoDBへのCRUD機能を実現するRESTful Web APIを作ってみる
作るもの
- Express内で定義したMongoDBのスキーマに対してデータをCreate,Read,Update,DeleteするWebAPIインターフェース
- これまで作ってきた掲示板アプリのWebAPIを作ってみる
開発環境
- MacOS High Sierra
- 詳細はこちら
1. Express プロジェクト作成
express-generator で雛形を作成します。テンプレートエンジンはデフォルトのままで作成。 これまで作ってきた掲示板機能のAPIを想定しています。
$ express kakiapi warning: the default view engine will not be jade in future releases warning: use '--view=jade' or '--help' for additional options create : kakiapi create : kakiapi/package.json create : kakiapi/app.js create : kakiapi/public create : kakiapi/views create : kakiapi/views/index.jade create : kakiapi/views/layout.jade create : kakiapi/views/error.jade create : kakiapi/routes create : kakiapi/routes/index.js create : kakiapi/routes/users.js create : kakiapi/bin create : kakiapi/bin/www create : kakiapi/public/javascripts create : kakiapi/public/images create : kakiapi/public/stylesheets create : kakiapi/public/stylesheets/style.css install dependencies: $ cd kakiapi && npm install run the app: $ DEBUG=kakiapi:* npm start $ cd kakiapi/ $ npm install npm WARN deprecated jade@1.11.0: Jade has been renamed to pug, please install the latest version of pug instead of jade npm WARN deprecated transformers@2.1.0: Deprecated, use jstransformer npm notice created a lockfile as package-lock.json. You should commit this file. added 103 packages in 3.134s
以下フォルダが作成されました
. ├── app.js ├── bin/ │ └── www ├── node_modules/ ├── package-lock.json ├── package.json ├── public/ │ ├── images │ ├── javascripts │ └── stylesheets ├── routes/ │ ├── index.js │ └── users.js └── views/ ├── error.jade ├── index.jade └── layout.jade
2. express-restify-mongoose をインストール
express-restify-mongoose mongooseで定義したオブジェクトモデルに対してcrud機能を実現するmiddleware mongooseと合わせてインストールします
$ cd kakiapi $ npm install mongoose express-restify-mongoose --save
3. app.jsを編集
app.js
var express = require('express'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); /// 追加 var mongoose = require('mongoose') var restify = require('express-restify-mongoose') /// var app = express(); /// 追加 var router = express.Router(); /// app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); /// 追加 mongoose.connect('mongodb://localhost/app1',{useMongoClient:true}); restify.serve(router, mongoose.model('Post', new mongoose.Schema({ name: { type: String }, kakikomi: { type: String } }))); app.use(router); /// // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app;
やったこと
- express-generator で作成されたコードから以下を削除
- favicon関連
- view engine に関する記述
- public/以下をstaticファイル配信する設定
- index,usersのコントローラ
- mongoose 接続を追加
- express router と mongoose スキーマモデルをexpress-restify-mongooseで対応つける
これだけでデータベースのコレクションposts
に対するCRUD機能が使えるようになります。
データ操作の機能や検索条件、その他オプションはこちらで確認できます。
express-restify-mongoose
4. まとめ
- たったこれだけのコードでMongoDBへのCRUD機能を持ったRESTful APIが実現できました。