在學習js時遇到Egg.js,就做了詳細的研究,它是阿里推出的基於Koa的node開發框架,為企業級框架和應用而生。如何建構後台服務API ,還需要後面的學習。本文章主要是介紹Egg.js搭建後台服務API ,需要的可以參考下。
因為平常開發都是前後端分離的模式,就想著使用Egg創建後台服務,寫一套API介面配合其他的專案。這個專案的技術棧用到了Egg.js、MongoDB、mongoose。這篇文章記錄我寫註冊登入模組和使用者中心模組的過程,目的是及時歸納學習過程,鍛鍊文件能力,和大家進行分享交流,共同進步。
專案地址: Egg-API
專案持續更新中,喜歡的請點心,關注,star ,fork, 這些是我長期堅持下去的動力(。_ 。)✎_
對於註冊登陸模組,需求分析如下:
註冊成為新用戶,對輸入的資料進行校驗
登陸進入系統,需要對輸入的資料進行校驗,基於token鑑權認證
登出功能
登陸進去可以在使用者中心模組中查看個人資訊
#在使用者中心模組修改個人資訊
明確資料:
userName: String 使用者名稱
userPass: String 帳號密碼
userEmail: String 用戶信箱
telphone: String 手機號碼
avatar: String 頭像
age: Number 年齡
sex: String 性別
City: String 城市
隱含資料:
userRole: Number 用戶角色(1.一般使用者、 2.管理員、 3.超級管理員,預設用戶為一般用戶,超級管理員在建立資料庫的時候創建)
userCreate: Date 用戶建立時間
lastLoginTime: Date 上次登入時間
laseLoginPlace: String 上次登入位址
下文介面說明中的api指介面名,params指傳入的數據,code指回應結果標識碼,msg指回應結果資訊說明,data指回應成功回傳的資料
api: /api/v1/signup (post) params: { userName: String, // 用户名,具有唯一性 userPass: String, // 用户密码 userEmail: String, // 用户邮箱 } code: 1、注册成功 0:输入信息不完善或有误 -1:注册失败,该用户名已存在 msg: 响应返回的信息说明 data: { _id: _id, userName: 用户名, token: 生成的token, }
api: /api/v1/signin (post,请求头带token) params: { userName: String, // 用户名 userPass: String, // 用户密码 } code: 1、登录成功 0:输入信息不完善或有误 -1:用户不存在 msg: 响应返回的信息说明 data: { _id: _id, userName: 用户名, lastLoginTime: 上次登录时间, lastLoginPlace: 上次登录地点, }
api: /api/v1/signout (get) code: 1、登出成功,前端退出系统并清空token msg: 登出响应返回信息说明 data: {}
api: /api/v1/user/userName (post,请求头带token) params: { userName: String, } code: 1、查询成功 0、输入信息不完善 -1、查询失败 msg: 查找个人信息返回信息说明 data: { userName: 用户名, userEmail: 用户邮箱, age: 年龄, city: 城市, ...... }
api: /api/v1/user/userName (put,token) params: { ...... // 更改的信息 } code: 1、更新成功 0、输入信息不完善或有误 -1、更新失败 msg: 更新个人信息返回信息说明 data: { userName: 用户名, ...... }
#附註:編碼實作說明只提供部分,完整內容請移步Egg-API
假設你已經初始化好了一個項目,項目的目錄結構約定和官方的一致。因為我們要使用MongoDB資料庫,所以要先安裝egg-mongoose,並在設定檔裡寫入:
// config/plugin.js exports.mongoose = { enable: true, package: 'egg-mongoose', }; // config/config.default.js config.mongoose = { url: 'mongodb://127.0.0.1/apiExample', options: {}, };
在model資料夾定義我們的schema檔案:
const UserSchema = new Schema({ userName: { type: String, unique: true, required: true, }, });
#路由定義:
router.post('/api/v1/signup', controller.user.signup);
controller編寫:用於解析使用者的輸入,處理後傳回對應的結果。我們可以把獲取到的資料放到render中進行渲染,然後把渲染後的結果發給遊覽器,或者,也可以把資料直接賦值給ctx.body,然後以json方式返回。
class UserController extends Controller { // 登录 async signin() { const { ctx } = this; const rule = { userName: { type: 'string', required: true, message: '必填项' }, userPass: { type: 'string', required: true, message: '必填项' }, }; const signinMsg = ctx.request.body; await ctx.validate(rule, signinMsg); signinMsg.userPass = ctx.helper.encrypt(signinMsg.userPass); const result = await ctx.service.user.signin(signinMsg); ctx.body = result; } }
service編寫:用於編寫業務邏輯層,可以重複使用。複雜資料的處理,例如要展現的資訊需要從資料庫取得,或是第三方服務的呼叫。
class UserService extends Service { // 更新用户信息 async updateUser(userMsg) { const { ctx } = this; const res = {}; const result = await ctx.model.User.findByIdAndUpdate(userMsg._id, userMsg); res.code = 1; res.msg = '用户信息已更改'; res.data = result; return res; } }
一個簡單的node應用程式結構就是這樣,如此便實作了用Egg.js負責介面服務。 apache php mysql
相關文章:
#相關影片:
#以上是技術文章:使用Egg.js建構後台服務API (收藏系列)的詳細內容。更多資訊請關注PHP中文網其他相關文章!