Express + Mongoose で MongoDB への接続設定サンプルコード
Express + Mongoose で MongoDB への接続設定のサンプルコードをご紹介します。
背景
私が実装した Express + Mongoose demo app · Pull Request #11 · codenote-net/expressjs-sandbox の commit に沿って、以下でご説明していきます。
[前提条件] Node.js, MongoDB, 各種ライブラリの version
- Node.js 12.14.0
- Express 4.17.1
- Mongoose 5.8.3
- MongoDB 4.2.2
MongoDB は Docker で起動
docker run -d \
--name mongo4.2.2 \
-p 27017:27017 \
mongo:4.2.2
Express + Mongoose で MongoDB への接続するサンプルコード
Mongoose インストール
npm install mongoose --save
参考 commit: npm install mongoose –save | 061c68f
Mongoose で MongoDB への接続設定
app.js
const mongoose = require('mongoose')
mongoose.connect(process.env.MONGODB_URL,
{
useNewUrlParser: true,
useUnifiedTopology: true
}
)
const db = mongoose.connection
db.on('error', console.error.bind(console, 'MongoDB connection error:'))
db.once('open', () => console.log('MongoDB connection successful'))
参考 commit: Setup mongoose.connect() | 28371f7
参考記事:
環境変数 MONGODB_URL を .envrc で設定
毎回、環境変数 MONGODB_URL を指定して node start するのは面倒だと思うので、以下のような .envrc を追加して direnv で環境変数を管理できるようにします。
.envrc
export MONGODB_URL=mongodb://localhost:27017/expressjs-sandbox
参考 commit: Add .envrc to gitignore for using direnv | fa1c8e3
参考 commit: Add .env.sample for committing to git repository | 8df02f0
Mongoose scheme と model の定義
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const ArticleSchema = new Schema({
title: {
type: String
},
body: {
type: String
}
}, {
timestamps: true
})
mongoose.model('Article', ArticleSchema)
参考 commit: Add the article mongoose model | 3912b3a
Mongoose models 自動読み込み設定
app.js を起動時に mongoose.model() を全て実行して model を自動読み込みするために、以下のように models ディレクトリ以下の .js ファイルをすべて require() しています。
const fs = require('fs')
const join = require('path').join
const models = join(__dirname, 'models')
fs.readdirSync(models)
.filter(file => ~file.search(/^[^.].*\.js$/))
.forEach(file => require(join(models, file)))
参考 commit: Bootstrap models | e9d9035
Express で Mongoose Model.find(), Model.create() を使ってみる
最後に Mongoose Model.find(), Model.create() を Express の routes/* から使ってみたサンプルコードは以下の URL から直接ご確認ください。正常系のコードのみで、error handling などは省略しています。
参考 commit: (DEMO) Mongoose Model.find(), Model.create() in Express routes | 3f32fff
以上、Express + Mongoose で MongoDB への接続設定したい、現場からお送りしました。
参考情報
- Connecting to MongoDB | mongoose – npm
- Mongoose v5.8.5: Connecting to MongoDB
- Express.js(node.js)からMongoDBへの接続とRestfull APIの設定 | アールエフェクト