用Nodejs,GraphQL,MongoDB,Hapi和Swagger構建強大的API(一)
來自專欄編程實驗室
我們將構建
一個非常強大且靈活的基於Nodejs的GraphQL API
由MongoDB提供支持的Swagger文檔
準備工作
- 安裝NodeJS
- JavaScript
- 終端(最好基於bash)
- 文本編輯器
- MongoDB
步驟
- 打開終端並創建項目, 在項目目錄中初始化一個Node項目。
- 接下來設置Hapi伺服器。安裝dependencies,可以使用Yarn 或 NPM。
yarn add hapi nodemon
Hapi使開發人員可以專註於編寫可重用的應用程序邏輯,而不用花費時間構建基礎架構。
https://youtu.be/2lprC0yYeFw
使用Hapi不是Express是因為Hapi是一個Node框架,與樣板代碼相比更加簡單和靈活。Hapi使我們能夠以非常快速的方式構建API。
- 安裝的第二個依賴項是good-ole nodemon。每次更改時Nodemon都會自動重新啟動伺服器,可以幫助我們快速開發。
- 然後用文本編輯器打開項目。這裡選擇了Visual Studio Code。
設置Hapi伺服器非常簡單。 在根目錄下創建一個index.js
文件,內容如下:
首先需要hapi
dependency
其次,創建一個不斷調用的Hapi伺服器- 作為參數,傳遞一個包含埠和主機選項的對象。
第三,最後,創建一個名為init的非同步表達式。在init方法內部有另一個啟動伺服器的非同步方法。查看server.start()
- 在底部調用init()
函數。
現在轉到http://localhost:4000
,可以看到以下內容:
- 快速添加腳本以使用nodemon運行伺服器。 打開
package.json
並編輯腳本部分
- 下一步
路由(Routing)
Hapi 路由非常直觀。 假設你點擊/
- 你期望會發生什麼? 這裡有三個主要組成部分。
什麼是路徑? - path
什麼是HTTP方法? 它是一個GET
-POST
或其他東西? - method
如果達到這條路線會發生什麼? - handler
- 在init方法內部,我們通過參數傳遞將一個新的方法附加到伺服器上,稱為
route
- 刷新頁面可以看到根
handler
的返回值
建立資料庫
接下來要設置你的資料庫。
- 這裡將用到 mongodb的 mongoose。
與資料庫相關的重要因素還包括 mlab。 我們用本地計算機運行mongo,而是使用像mlab這樣的雲提供商。(當然你們還可以選擇其他的)
- 然後創建資料庫
- 最後為資料庫創建一個用戶。
連接mongoose和mlab
- 打開index.js並添加下面的內容。
更多關於MongoDB技能的學習教程:
https://youtu.be/9OPP_1eAENg?list=PL4cUxeGkcC9jpvoYriLI0bY8DOgWZfi6u- 如果一切按照計划進行,控制台應該會顯示
『connected to database』
創建模型
- 使用mongoDB進行數據建模。
- 創建一個名為
models
的目錄,並新建文件Painting.js
Painting.js
是我們的繪畫模型。 它將保存與繪畫相關的所有數據。
需要mongoose dependency。
通過調用mongoose模式構造函數並傳入選項來聲明PaintingSchema
。 注意它的強類型:例如name
欄位可以包含一個字元串,而techniques
由一個字元串數組組成。
導出模型並將其命名為Painting
從資料庫中提取所有的繪畫
- 首先,我們需要將
Painting
導入到index.js
添加新的路由
- 最理想的情況是URL終端反映行為。
例如/api/v1/paintings
?—?/api/v1/paintings/{id}
- 等等。
- 以
GET
和POST
路線開始。GET
獲取所有的繪畫,POST
添加一幅新的繪畫。
注意:將路線修改為一個對象數組,而不是單個對象。
- 為
/api/v1/paintings
路徑創建一個GET
。 在處理程序內部調用mongoose模式。 Mongoose有內置方法 -find()
,因為我們沒有輸入查找條件,所以它會返回所有記錄。 - 還要為相同的路徑創建了一個
POST
,因為要遵循REST約定。然後解構路由處理程序 – 記住在Painting
模式中聲明的三個欄位:name
?—?url
?—?techniques
在這裡,我們只接受來自請求的那些參數,並將請求參數傳遞給mongoose。 完成傳遞參數後,在新記錄上調用save()方法,將其保存到mlab資料庫中。
- 如果轉到http:// localhost:4000 / api / v1 / paintings,應該只能看到一個空數組。
因為我們還沒有添加任何繪畫。
- 安裝postman,它適用於所有平台。
- 安裝後打開postman。
- 首先更名為
POST
單擊URL欄下面的body選項並在示例中填充欄位。
{ "name": "Mona Lisa", "url": "https://en.wikipedia.org/wiki/Mona_Lisa#/media/File:Mona_Lisa,_by_Leonardo_da_Vinci,_from_C2RMF_retouched.jpg", "techniques": ["Portrait"]}
- 然後打開 http://localhost:4000/api/v1/paintings
GraphQL
源代碼:
sharehoodies/graphql-nodejs-hapi-api
作者:Indrek Lasn
原文:https://medium.freecodecamp.org/how-to-setup-a-powerful-api-with-nodejs-graphql-mongodb-hapi-and-swagger-e251ac189649翻譯:sugarain後續更新請關注實驗樓
推薦閱讀:
※Expressjs 生成的NodeJS網站,用「npm start」可以啟動訪問,forever 或者 pm2 可以啟動,但是無法訪問?
※什麼是 GraphQL?
※前端領域流行的js版本控制方法,以及他們之間的區別?
※參加第11屆D2前端技術論壇,你有什麼收穫?