iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 20
1
Modern Web

還在想要買哪一堂線上課程嗎?培養看文件的習慣吧!用 MDN 文件學後端:NodeJS & MongooseDB系列 第 29

29日: Express Tutorial 3: Using a Database (with Mongoose) ( 概覽 、 簡述資料庫互動 、 有哪些 ODM/ORM )

寫在前面

這個章節也是篇幅很多, 慢慢寫囉

出處 , 有繁體中文版, 有些部分簡體中文版也翻得很好

Using a Database (with Mongoose)

Overview

Express 可以使用的資料庫有很多, 同時也有許多方法可以達成 CRUD 。

What databases can I use?

Node 有支援的 db 都可以用。 包括 PostgreSQL, MySQL, Redis, SQLite, MongoDB

選擇 db ,需要考慮到學習曲線、 產出效率、 備份難易度、 成本、 社群支持 ... 等等。 點擊 Database integration ( Express docs ) 看更多

What is the best way to interact with a database?

跟 db 互動方式有二:

  • 用 db 原生 query 語言, 例如 SQL
  • 用 Obj Data / Relational Model ( ODM / ORM ) , 會把資料表現得像是 JS obj 一樣, 對我們來說比較好理解。 ( 第九天有聊過這個,略過 )

使用原生會有超好的效率, ODM 因為還要轉譯所以會慢些, 最大好處一樣是上面說的容易理解、 不用再花時間學 query 語言
Tip: ODM/ORM 通常會有較低的開發及維護成本, 除非我們本身就非常熟悉 query 語言或者超級要求性能。 ( 基本上就是在講同一件事啦 )

What ODM/ORM should I use?

NPM 有很多可以用的 ODM/ORM 方式:

  • Mongoose: MongoDB obj modeling tool , 設計用來處理非同步環境
  • Waterline: 從 Sails ( 一個以 Express 為基底的框架 ) 取出的 ORM , 它提供統一的 API 存取眾多不同的 db , 包含 Redis, MySQL, LDAP, MongoDB, Postgres
  • Bookshelf: 以兼具 promise-based & 傳統 callback 介面為特色, 支援一對一、 一對多、 多對多關係, 用於 PostgreSQL, MySQL, SQLite3
  • Objection: 讓 SQL 發揮更強大的威力不再是難事, 支援同上
  • Sequelize: Node.js & io.js 的 promise-based ORM , 支援 PostgreSQL, MySQL, MariaDB, SQLite, MSSQL
  • Node ORM2: 用 oo 方式處理 db 有關的任務, 支援 MySQL, SQLite, Progress
  • JugglingDB: Node 的 cross-DB ORM, 支援 PostgreSQL, MySQL, SQLite3, MongoDB, Redis, js-memory-storage

選擇時, 除了提供的特色外, 一樣要看社群活躍程度。 這篇文章 ( MDN原文 ) 撰寫時, Mongoose 還是最熱門的 ODM 。

Using Mongoose and MongoDb for the LocalLibrary

在這個圖書館網站範例中, 我們使用 Mongoose 作為前端與 MongoDB 溝通的行為, MongoDB 是一個 NoSQL db, 有 document-oriented (中譯:文件導向,相關中文資料貌似不多,附上 wiki 連結, 是 NoSQL 資料庫的主要類別之一) 特性。 collection of documents 轉化為 table of rows ( 第九天的文章也有相關連結可參考 )

Tip: 要使用 Mongoose , 不知道 MongoDB 也無妨。 如果已經熟悉 MongoDB, 可以看 Mongoose documentation 可以更快了解

接下來會為圖書館網站定義及存取 Mongoose schema & models


上一篇
28日: Express Tutorial 2: Creating a skeleton website ( 結構 - app.js & routes & views 、 練習題 、 結語 )
下一篇
30日: Express Tutorial 3: Using a Database (with Mongoose) ( 設計圖書館網站的 models )
系列文
還在想要買哪一堂線上課程嗎?培養看文件的習慣吧!用 MDN 文件學後端:NodeJS & MongooseDB30

尚未有邦友留言

立即登入留言