Express 要與 MongoDB 溝通的方式有好幾種,其中最知名的就是 mongoose 這個套件了,它是一個 ODM 套件,採用 schema-based,讓我們能用較簡單的方式來存取 MongoDB。
一樣透過 npm 進行安裝:
npm install mongoose
安裝 type 定義檔:
npm install @types/mongoose --save-dev
我們可以透過 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.ts
與 index.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();
這樣就完成連線了!
mongoose 是很熱門且好用的套件,前面有提到它是 Schema-based 的 ODM,這點很重要務必記得,因為 mongoose 其中一個核心概念就是 Schema,下一篇就會開始帶大家建立 Schema 並寫簡單的 CRUD,敬請期待!