iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 11
0
Software Development

今晚我想來點 Express 佐 MVC 分層架構系列 第 11

[今晚我想來點 Express 佐 MVC 分層架構] DAY 11 - 用 mongoose 連線 MongoDB

mongoose 是什麼?

https://ithelp.ithome.com.tw/upload/images/20200819/201193380arQNoIQjv.png
圖片來源

Express 要與 MongoDB 溝通的方式有好幾種,其中最知名的就是 mongoose 這個套件了,它是一個 ODM 套件,採用 schema-based,讓我們能用較簡單的方式來存取 MongoDB。

安裝 mongoose

一樣透過 npm 進行安裝:

npm install mongoose

安裝 type 定義檔:

npm install @types/mongoose --save-dev

與 MongoDB 連線

我們可以透過 mongoose 的方法進行連線,新增一個 database 的資料夾,並把連線相關的程式碼放這邊,目前的目錄結構如下:

├── src
|   ├── index.ts
|   ├── app
|   |   └── app.routing.ts
|   ├── database
|   |   ├── database.ts
|   |   └── index.ts
|   └── environments
|       ├── development.env
|       └── production.env
├── package.json
└── tsconfig.json

可以看到在 database 下新增了 database.tsindex.ts,主要的內容會放在 database.ts 中,透過 mongoose 的 connect 進行連線,在較新版的 mongoose 還需要額外添加 useNewUrlParser 來使用新版的 URL Parser,以及使用 useUnifiedTopology 來使用新版的引擎:

import mongoose from 'mongoose';

const DB_CONNECT_OPTIONS = {
    useNewUrlParser: true,
    useUnifiedTopology: true
};

export const Database = {
    connect: () => {
        mongoose.connect(
            `mongodb+srv://${ process.env.DB_USER }:${ process.env.DB_PWD }@expressmvctodolist-clus.jjknt.gcp.mongodb.net/${ process.env.DB_NAME }?retryWrites=true&w=majority`,
            DB_CONNECT_OPTIONS
        )
            .then(() => console.log('Database is connected.'))
            .catch(err => console.log(err));
    }
};

由於我們有使用到環境變數,所以需要去更改配置檔 development.env

PORT=3000
DB_USER=YOUR_DB_USER_NAME
DB_PWD=YOUR_DB_USER_PASSWORD
DB_NAME=YOUR_DB_NAME

只單獨新增 development 是因為開發環境所使用的資料庫會與正式環境有所不同,考量到目前是開發階段,所以只更改了 development

接著在 database 資料夾下的 index.ts 中進行匯出:

export * from './database';

最後,在 src 下的 index.ts 中添加下方程式碼來連線資料庫:

import { Database } from './database';

Database.connect();

這樣就完成連線了!
https://ithelp.ithome.com.tw/upload/images/20200820/20119338gO6h5AVtIU.png

小結

mongoose 是很熱門且好用的套件,前面有提到它是 Schema-based 的 ODM,這點很重要務必記得,因為 mongoose 其中一個核心概念就是 Schema,下一篇就會開始帶大家建立 Schema 並寫簡單的 CRUD,敬請期待!


上一篇
[今晚我想來點 Express 佐 MVC 分層架構] DAY 10 - 設置 MongoDB
下一篇
[今晚我想來點 Express 佐 MVC 分層架構] DAY 12 - mongoose 之 CRUD
系列文
今晚我想來點 Express 佐 MVC 分層架構30

尚未有邦友留言

立即登入留言