TSLab【第7回 Express勉強会】mongoose(ORM)

Node.js
  • URLをコピーしました!

定例になりましたTypeScript勉強会を開催したので実施ログを残していきます!

前回の続きとなるので気になる方は前回の内容も合わせてご覧くださいませ。

あわせて読みたい
TSLab【第6回 Express勉強会】MongoDB×Express 定例になりましたTypeScript勉強会を開催したので実施ログを残していきます! 前回の勉強会の内容は下記の記事になります。 https://kosotudev.com/typescript-session-...
目次

内容

前回の勉強会ではMognoDBをDocker環境で構築しましたので、今回の勉強会ではExpressからMongoDBにアクセスしてデータを取得していきます。

今回はORMにmongooseを使用します。

MongoDBを操作するためのnpmライブラリで、一般的にMongoDB × Node.jsの場合はこちらを使用するっぽい(?)です。

ライブラリ

それでは早速やっていきましょう!

mongooseを設定

mongooseインストール

まずは本命のmongooseをインストールしていきます。

こいつがいないと何も始まりません。(笑)

$ yarn add mongoose

mongooseコネクション設定

インストールが完了したらmongooseの接続設定を行なっていきます。

記述する箇所はExpressのルートにあるindex.ts(またはmain.ts)になります。

アプリケーションを定義しているファイルに下記の記述をします。

import mongoose from 'mongoose'

dotenv.config({ path: __dirname + '/.env' })
mongoose.connect('mongodb://mongo:27017/mongoose_api', {
  user: process.env.MONGOOSE_USERNAME,
  pass: process.env.MONGOOSE_PASSWORD,
})
const db = mongoose.connection
db.on('error', console.error.bind(console, 'DB connection error:'))
db.once('open', () => console.log('DB connection successful'))

mongoose.Promise = global.Promise

環境変数のロードにはdotenvを使用します。

MONGODB_USERNAME={ユーザー名を指定}
MONGODB_PASSWORD={パスワードを指定}

スキーマ設定

DBコネクション設定ができたらusersデータアクセス用のスキーマを設定します。

今回はデモデータとしてユーザー情報をDBに入れており、name: stringage: number の二つのプロパティを持たせています。

import mongoose, { Schema, Document } from 'mongoose'
export interface UserDoc extends Document {
  name: String
  age: Number
}

const userSchema: Schema = new Schema(
  {
    name: {
      type: String,
      trim: true,
      required: true,
    },
    age: {
      type: Number,
    },
  },
  {
    timestamps: true,
  }
)

export default mongoose.model<UserDoc>('User', userSchema)

APIで呼び出し

ここまでで設定については完了したので実際にデータを呼び出す処理を記述します。

今回はユーザー一覧を取得するだけの簡単なAPIを実装します。

(と言っても追加はこれだけです。)

// 定義したスキーマをインポート
import User from '../../models/User'

// ユーザー一覧を取得
const data = await User.find({})

これで無事にデータが取れればOKです!

簡単ですね!

さいごに

今回はExpress環境でサクッとMongoDBにアクセスしていきました。

思ったよりも記述に関しては少なくて簡単に接続ができたので驚きました。

ただし、MognoDB側のアクセス権限でハマったのでそちらは別の記事にまとめていこうと思います。

MongoDBの構築について気になる方は下記の記事を併せてご覧くださいませ!

あわせて読みたい
【Docker × MongoDB】docker-composeでMongoDB環境を構築してみた こんにちは!RYOTAです! 当記事をご覧いただきありがとうございます! これまでNoSQLデータベースを使ったことがなかったのですが、勉強会でMongoDBを触ってみることに...

ExpressのAPI設計について気になる方は下記の記事をご覧くださいませ!

あわせて読みたい
TSLab 【第3回 Express勉強会】例外処理 恒例のTypeScript勉強会を実施したので簡単なログを残していきます! 前回の続きとなるので気になる方は前回の内容も合わせてご覧くださいませ。 https://kosotudev.com...
Node.js

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次