LoginSignup
13
13

More than 5 years have passed since last update.

[Node.js] Express を TypeScript で書く - MongoDB 接続編

Last updated at Posted at 2018-09-06

はじめに

この記事は続き物となっております。以下も合わせてお読みください。

また環境は以下を前提としてます。

  • Windows 10
  • Node.js 10.10.0
  • Express 4.16.3
  • TypeScript 3.0.3
  • MongoDB 4.0.2 Community Server
  • MongoDB Node.js 3.1.4
  • Visual Studio Code 1.26.1

MongoDB の導入

サーバーの導入

MongoDB公式 よりCommunity Server をダウンロードしてきます。インストールはwindows環境であればインストーラーのウィザードに従うだけで出来ます。サーバーはサービスとして登録されるので特に意識して立ち上げるといった必要はありません。

モジュールの導入

プロジェクトの方に戻り、MongoDB用のモジュールをインストールします。TypeScript用の型定義も一緒にインストールします。現時点ではバージョンは3.1です。

npm install --save mongodb @types/mongodb

MongoDBを使用する準備

APIの各所でMongoDBを使うことになるので、接続、DB取得までを共通で使える部品を作ります。公式のドキュメントを見ながら作ります。

接続までは以下のソースコードの通りです。

import * as MongoDB from 'mongodb';

const url = 'mongodb://localhost:27017';

client.connect(url, { useNewUrlParser: true }, (err, client) => {
    if (err) {
        // 接続エラー時の処理
        return;
    }

    // 接続後の処理
    client.close();
});

{ userNewUrlParser: true } を入れておかないと mongodb:// といったURLを使ったときに警告がでるので入れておきます。

接続後、dbを取得するのは簡単で以下のように書くだけです。

const db = client.db('dbname');

これらをまとめて関数化し部品にしたものが以下のソースになります。

src/common/mongodbClient.ts
import * as MongoDB from 'mongodb';

const url = 'mongodb://localhost:27017';
export const dbName = 'nekoblog';

export default function (callback: (err: MongoDB.MongoError, client: MongoDB.MongoClient, db: MongoDB.Db) => void) {
    const client = MongoDB.MongoClient;
    client.connect(url, { useNewUrlParser: true }, (err, client) => {
        if (err) {
            callback(err, null, null);
            return;
        }
        callback(null, client, client.db(dbName));
    });
}

使い方は以下の感じです。

import mongodbClient from './mongodbClient';

mongodbClient((err, client, db) => {
    if (err) {
        // エラー時の処理
        client.close();
        return;
    }

    // 接続完了時
    client.close();
});

接続テスト

接続テスト用のAPIを作成し、MongoDBに接続が出来ているか確認します。

src/routes/dev/index.ts
import * as Express from 'express';
import mongodbClient from '../../common/mongodbClient';

const router = Express.Router();

router.get('/mongodb', (req, res, next) => {
    mongodbClient((err, client) => {
        if (err) {
            res.status(500).json({ message: 'MongoDB not connected.' });
            return next(err);
        }
        client.close();
        res.json({ message: 'MongoDB Connected.' });
    });
});

export default router;

src/server.ts への記述は省略しますが上を /dev に割り当ててます。

サーバー起動後、 http://localhost:3000/dev/mongodb に接続し { message: 'MongoDB Connected.' } が取得できればOKです。

次からCRUDの実装をしていきます。

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13