Nodejs + Express + MongoDBの組み合わせでWebサービスを作る

Mac OS環境でNodejs + Express + MongoDBの組み合わせでWebサービスを開発することの基本をまとめておきます。

npm init

npm install –save express

package.jsonにexpressが追加される。

適当にapp.jsを作って

node app.js

とすると、サーバーが立ち上がってlocalhost:5000とブラウザーに打ち込めば、app.jsで動いているwebアプリにアクセスできます。

nodemonは開発中にコードに変更があれば、サーバーを自動再起動させる。

いちいちサーバーを再起動する必要がなくなります。開発には必須です。

npm でnodemonをグローバル環境にインストールする。

npm install -g nodemon

npm root -g

グローバル指定すると、/usr/local/lib/node_modulesにインストールされます。

handlebars というview engine(テープレートエンジン)を使う。

要はHTMLにjavascriptを埋め込むためのテープレートエンジンですね。

npm install –save express-handlebars

Express

expressは必要最低限の機能を備えたWebフレームワークです。

route(ルートについて)

ルートとはどこにアクセスしたらどのようなレスポンスを返すかということを決めることです。

ブラウザーにアドレスを入れる

そのアドレスにアクセスする

決められたレスポンスが返ってくる

Webアプリの基本はこれなので、その設定をexpressで主に行います。

routeで/user/:idのような指定をすると、req.params.idでその値を取ることができる。

例えば、既存の記事を編集するような場合、route設定は/ideas/edit/:idのような指定の仕方をします。:idは記事ごとのidです。そのように指定するとIdeaというデータベースで記事idで検索(findOne)を行い、見つけたidea(データベース内の記事データ)をideas/editというパスに表示します。

app.get('/ideas/edit/:id', (req, res) => {
  Idea.findOne({
    _id: req.params.id
  })
  .then(idea => {
    res.render('ideas/edit', {
      idea:idea
    });
  });
});

expressは色々とミドルウェアを入れられて便利

expressは最小限の機能のwebフレームワークです。

その代わり、他のパッケージからミドルウェア関数をどんどん追加して使います。

そのおかげで、多機能を実現することができます。

app.use()でミドルウェアを読み込見ます。

methodOverride

methodOverrideはどのように使うのか?

HTTPリクエストのPUTやDELETEを扱いたい時に使います。

mongoose

mongooseを使ったMongoDBとの接続方法

// Connect to mongoose
mongoose.connect('mongodb://localhost/vidjot-dev', {
  useMongoClient: true
})
  .then(() => console.log('MongoDB Connected...'))
  .catch(err => console.log(err));

vidjot-devというところがデータベース名です。MongoDB + mongooseの場合、こうやって接続したら勝手にデータベースが作成されます。

接続できたら、’MongoDB Connected…’と表示されるようにしています。

エラーをキャッチしたら、エラーが出力されます。

// Load Idea Model
require('./models/Idea');
const Idea = mongoose.model('ideas');

Ideaに代入されるのはideasというモデルです。

でそのモデルはどのように設定されているかというと次のプログラムです。

./models/Idea.jsというファイル内で作成しています。

//Idea.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const IdeaSchema = new Schema({
  title:{
    type: String,
    required: true
  },
  details:{
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});

mongoose.model('ideas', IdeaSchema);

body-parser

reqを受け取っていい感じに読み込んでくれるモジュールですね。parser(パーサー)とは構文解析プログラムという意味で、まさしく受け取った情報をうまい具合に解釈してくれるもの全般に使われる言葉ですね。

データーベースとのやりとりを行うときに使うと便利です。

mongodbからjson形式でデータを受け取り、それを解釈するといった使い方です。

// Body parser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

req.body

コメント