開發輕量級REST API樣板 基於Node.js、MongoDB 通過Mongoose驅動

2023-04-06 18:00:19

ZY.Node.Mongodb

專案介紹


  • 基於 Node.js、Express.js 和 MongoDB 通過Mongoose驅動進行 REST API 開發的輕量級樣板。
    整合了Swagger UI、JWT、session、傳送郵箱驗證、紀錄檔管理、統一的預定義狀態碼響應格式等,對於為前端平臺構建純淨的Web API非常有用。

  • 該專案我嘗試做出輕鬆維護程式碼結構的專案樣板,因為任何初學者也可以採用該流程並開始構建API。

  • 專案開放,可以提出建議、錯誤的issues。

專案特點


  • 輕量級Node.js專案提供Restful API
  • 資料庫採用 Mongodb, 通過Mongoose驅動。
  • CRUD操作範例
  • 跨域處理
  • 紀錄檔管理
  • 具有恰當的狀態程式碼的預定義響應結構
  • 全域性錯誤處理
  • 增加express-validator請求引數校驗
  • jwt驗證 使用者許可權中介軟體分離
  • 基本身份驗證(採用bcrypt單向Hash加密演演算法加密密碼進行註冊/登入)
  • Token生成和校驗請求頭的authorization
  • 整合swagger-ui
  • 增加郵件驗證碼通知
  • session 驗證碼校驗
  • 採用jest 介面單元測試

如何獲得並執行專案:


首先確保您系統中安裝了Mongodb,和Nodejs,一起準備完善之後。按照如下操作。
有的同學啟動會報錯可能是依賴包的版本問題需要注意
我的環境設定供參考

  • Node.js 14.18.1+
  • MongoDB 5.1+

1,clone程式碼

git clone https://gitee.com/Z568_568/node.mongodb.git

2,安裝依賴

npm install

3,啟動程式

開發環境:npm run dev 基於 nodemon 熱更新
生產環境:npm run start

4,啟動成功範例

如何增加新的model


只需在 /models/v1/mapping/ 中建立一個新檔案,
然後在控制器/controllers/v1/中建立一個對應新模型的新控制器的並使用。

如何增加新的路由router


只需在 /routes/v1/ 中建立一個新檔案,並且引入它對應的controllers進行使用,routes下面的檔案 將被 mount-routes外掛自動解析並以檔名作為api根路徑,
開發環境下會列印在終端上:

如何增加新的控制器


只需在 /controllers/v1/ 中建立一個新檔案即可,並且引入相關模型進行使用

如何理解內建的登入註冊邏輯


/*
* TODO: 註冊登入大概邏輯:
*       1.使用者註冊 - 使用者資訊入庫 - 傳送驗證碼 - 校驗驗證碼
*                                   |
*                           驗證碼傳送失敗、驗證碼失效或者校驗失敗 - 重新傳送或輸入驗證碼 - 校驗驗證碼
*   *
*       2.使用者登入 -(賬號、密碼、驗證狀態都校驗通過)- 發Token
*                       |
*                 驗證狀態不通過 - 重新校驗驗證碼/重發驗證碼 - 校驗驗證碼 - 發Token
* */

專案結構


.
├── app.js                  //入口檔案
├── package.json            //依賴組態檔
├── .env.development        //開發環境設定
├── .env.production         //生產環境設定
├── config                  //專案設定
│   ├── db.config.js
│   ├── swagger.config.js
│   └── ...
├── controllers             //控制模組(業務處理)
│   └── v1
│       ├── UserController.js
│       └── ...
├── models                  //模型模組(建表)
│   └── v1
│       ├── user.test.js        /模型統一匯出
│       └── mapping
│           ├──UserModel.js
│           └── ...
├── routes                  //路由(設定實際API地址路徑)
│     └── v1
│         ├── user.test.js
│         ├── user.js
│         └── ...
├── db                      //mongodb資料庫連線
│   ├── user.test.js              
│   └── ...
├── middlewares             //中介軟體
│   ├── jwt.js
│   ├── permissions.js
│   ├── session.js
│   └── ...
├── logs                    //紀錄檔
│   ├── info.log
│   ├── error.log
│   └── ...
└── utils                   //輔助工具
    ├── utils.apiResponse.js
    ├── utils.mailer.js.js
    └── ...

關於作者


建立和維護由