使用LoopBack快速開發簡單的數據庫CRUD
1. LoopBack簡介
網站:https://loopback.io/doc/index.html
我們都知道Express是一個基於Node.js的web開發框架,但是它只是一個保持最小規模的框架,這意味着它只實現了基本的web server的功能和擴展點。實際應用的話還需要額外的框架或中間件的幫助。Express的文檔中介紹數據庫的支持的時候推薦了LoopBack,這是一個基於express和nodejs的框架,致力於提供一個易擴展的REST API的腳手架,寫很少代碼就可以實現CRUD這樣的REST API的功能。它還支持GraphQL。
2. 開發環境準備
- Node JS - 運行環境,必選
- Express - 基礎框架,必選
- LoopBack - 使用 npm 安裝:
npm install -g @loopback/cli
- MySQL - 數據庫,可選
3. 使用LoopBack
3.1開發步驟
安裝好loopback 的命令行工具後就可以使用了。
3.1.1 生成APP項目
lb4 app
隨後它會詢問你一系列問題諸如項目名稱,描述,根目錄,入口類名之類,一一回答即可。當然你也可以在在上面命令的基礎上加上參數就不用回答這些問題了。
3.1.2 生成model
這一步非必須,但我們要用數據庫的話還是得生成對應的model。可以用如下命令來生成model:
lb4 model [options] [<name>]
但我們經常面對的問題是已經有現成的數據庫和表了,並非全新定義。針對這種情況loopback 提供了discovery(發現)的機制,可以從已有的數據庫中讀取和選擇表定義來生成對應的model。
這時候你得先定義一個數據源:
lb4 datasource
它會詢問你數據庫地址,用戶密碼等信息然後爲你建立好數據源。和上面一樣,自己手動加參數也行,就不會再詢問了。
有了數據源後,先編譯一下npm run build
,否則找不到數據源。然後執行discover命令來掃描數據庫生成model:
lb4 discover
接下來它會詢問你要用哪個數據源,列出所有表讓你選擇,然後對應選中的表生成model。
生成model以後,還得生成repository才能用。
lb4 repository
3.1.3 生成controller
因爲loopback是生成web API的框架,所以沒有view層,controller就是對外接口了。以下命令可以生成controller
lb4 controller
運行時它會詢問你要一個普通的controller還是要一個支持數據庫CRUD的controller。
如果是CRUD的,就會讓你選擇用哪個repository(對應於某個model以及背後的數據庫表)。
如果是普通的就要自己往裏面添加響應代碼了。
3.1.4 編譯運行
直接在項目根目錄下執行npm start
即可啓動服務器。默認的主頁很簡單,點擊裏面的鏈接可以看到目前支持的API定義,包括給機器閱讀的json格式和給人看的網頁表格版。
如果你僅僅想編譯一下npm run build
即可。
3.1.5 添加友善的前端
上面生成的服務器只有rest API可用,如果想要GUI用戶界面還是得自己寫。比如我們用react 寫一個單頁應用,來調用這些API交互。這些前端網頁和JS代碼對於loopback server而言只是靜態資源而已(因爲即使是代碼也是運行在客戶端瀏覽器中的)寫好了放到public文件夾即可。
3.2 踩坑記錄
- 執行discover前需要定義data source並編譯一下
- 如果刪除了不想要的代碼,最好
npm run clean
一下否則有可能仍然運行不過 - 如果想生成ralation, 生成之前需要建好repository。如果遇到這樣的錯誤:“Target model primary key does not exist.”。只要把model中@property部分的id:1手動改成id:true就可以了。如果遇到這樣的錯誤:“Property ‘Number’ does not exist on type…"。要把相應的controller裏面Number 改成number。