摘要:因為平常開發(fā)都是前后端分離的模式,就想著使用創(chuàng)建后臺服務(wù),寫一套接口配合其他的項目。復(fù)雜數(shù)據(jù)的處理,比如要展現(xiàn)的信息需要從數(shù)據(jù)庫獲取或者是第三方服務(wù)的調(diào)用。更新用戶信息用戶信息已更改一個簡單的應(yīng)用結(jié)構(gòu)就是這樣,如此便實現(xiàn)了用負責接口服務(wù)。
寫在前面的話
最近在學習Egg.js,它是阿里推出的基于Koa的node開發(fā)框架,為企業(yè)級框架和應(yīng)用而生。Egg.js 的官方文檔已經(jīng)很完善了,想學習Egg.js的可以直接查看官方文檔。
因為平常開發(fā)都是前后端分離的模式,就想著使用Egg創(chuàng)建后臺服務(wù),寫一套API接口配合其他的項目。該項目的技術(shù)棧用到了Egg.js、MongoDB、mongoose。這篇文章記錄一下我寫注冊登錄模塊和用戶中心模塊的過程,目的是及時歸納學習過程,鍛煉文檔能力,和大家進行分享交流,共同進步。
項目地址: Egg-API
項目持續(xù)更新中,喜歡的請點心,關(guān)注,star ,fork,這些是我長期堅持下去的動力 (。_ 。) ?_
以下是正文 需求分析對于注冊登陸模塊,需求分析如下:
注冊成為新用戶,對輸入的數(shù)據(jù)進行校驗
登陸進入系統(tǒng),需要對輸入的數(shù)據(jù)進行校驗,基于token鑒權(quán)認證
登出功能
登陸進去可以在用戶中心模塊查看個人信息
在用戶中心模塊修改個人信息
數(shù)據(jù)分析設(shè)計顯式數(shù)據(jù):
userName: String 用戶名
userPass: String 賬號密碼
userEmail: String 用戶郵箱
telphone: String 手機號
avatar: String 頭像
age: Number 年齡
sex: String 性別
City: String 城市
隱式數(shù)據(jù):
userRole: Number 用戶角色(1.普通用戶、 2.管理員、 3.超級管理員,默認用戶為普通用戶,超級管理員在創(chuàng)建數(shù)據(jù)庫的時候創(chuàng)建)
userCreate: Date 用戶創(chuàng)建時間
lastLoginTime: Date 上次登錄時間
laseLoginPlace: String 上次登錄地址
API分析設(shè)計下文接口說明中的api指接口名,params指傳入的數(shù)據(jù),code指響應(yīng)結(jié)果標識碼,msg指響應(yīng)結(jié)果信息說明,data指響應(yīng)成功返回的數(shù)據(jù)
api: /api/v1/signup (post) params: { userName: String, // 用戶名,具有唯一性 userPass: String, // 用戶密碼 userEmail: String, // 用戶郵箱 } code: 1、注冊成功 0:輸入信息不完善或有誤 -1:注冊失敗,該用戶名已存在 msg: 響應(yīng)返回的信息說明 data: { _id: _id, userName: 用戶名, token: 生成的token, }
api: /api/v1/signin (post,請求頭帶token) params: { userName: String, // 用戶名 userPass: String, // 用戶密碼 } code: 1、登錄成功 0:輸入信息不完善或有誤 -1:用戶不存在 msg: 響應(yīng)返回的信息說明 data: { _id: _id, userName: 用戶名, lastLoginTime: 上次登錄時間, lastLoginPlace: 上次登錄地點, }
api: /api/v1/signout (get) code: 1、登出成功,前端退出系統(tǒng)并清空token msg: 登出響應(yīng)返回信息說明 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: 用戶名, ...... }編碼實現(xiàn)
注:編碼實現(xiàn)說明只提供部分,完整內(nèi)容請移步Egg-API
假設(shè)你已經(jīng)初始化好了一個項目,項目的目錄結(jié)構(gòu)約定和官方的一致。因為我們要使用MongoDB數(shù)據(jù)庫,所以要先安裝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編寫:用于解析用戶的輸入,處理后返回相應(yīng)的結(jié)果。我們可以把獲取到的數(shù)據(jù)放到render中進行渲染,然后把渲染后的結(jié)果發(fā)給游覽器,或者,也可以把數(shù)據(jù)直接賦值給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編寫:用于編寫業(yè)務(wù)邏輯層,可以復(fù)用。復(fù)雜數(shù)據(jù)的處理,比如要展現(xiàn)的信息需要從數(shù)據(jù)庫獲取,或者是第三方服務(wù)的調(diào)用。
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應(yīng)用結(jié)構(gòu)就是這樣,如此便實現(xiàn)了用Egg.js負責接口服務(wù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/19305.html
摘要:因為平常開發(fā)都是前后端分離的模式,就想著使用創(chuàng)建后臺服務(wù),寫一套接口配合其他的項目。復(fù)雜數(shù)據(jù)的處理,比如要展現(xiàn)的信息需要從數(shù)據(jù)庫獲取或者是第三方服務(wù)的調(diào)用。更新用戶信息用戶信息已更改一個簡單的應(yīng)用結(jié)構(gòu)就是這樣,如此便實現(xiàn)了用負責接口服務(wù)。 寫在前面的話 最近在學習Egg.js,它是阿里推出的基于Koa的node開發(fā)框架,為企業(yè)級框架和應(yīng)用而生。Egg.js 的官方文檔已經(jīng)很完善了,想學...
摘要:接前一篇,阿里初體驗一我們繼續(xù)我們的之旅。注意到,目錄里和兩個文件夾,這里也是我們編寫業(yè)務(wù)邏輯的主要地方。用于解析用戶的輸入,處理后返回相應(yīng)的結(jié)果。在使用導出的模塊時,需要把導出的模塊名改為駝峰標準,且首字母變?yōu)樾憽? 接前一篇,阿里egg.js初體驗(一) 我們繼續(xù)我們的egg之旅。我們已經(jīng)完成了對于項目結(jié)構(gòu)的搭建,現(xiàn)在我們需要開始業(yè)務(wù)的編寫。注意到,目錄里controller和se...
摘要:我為了方便直接就指定了淘寶倉庫地址運行服務(wù)運行項目就比較簡單了,運行的命令在瀏覽器中打開地址,就能看到服務(wù)已經(jīng)啟動完成。 傳送門:學習node.js服務(wù)開發(fā)這一篇就夠了系列文章 1.創(chuàng)建工程目錄 1.1 創(chuàng)建一個文件夾叫 my-egg-application $ mkdir my-egg-application 不熟悉命令行的同學也可以手動創(chuàng)建文件夾 2.初始化項目模板 2.1 進...
摘要:之前自己的博客是用做的,后面想做一個有后臺的博客就打算用加來試試,于是就有了這個博客。 之前自己的博客是用hexo做的,后面想做一個有后臺的博客就打算用vue加node來試試,于是就有了這個博客。項目地址 W-Blog W-Blog是一個基于vue和node的小小小博客前端用vue,后端用egg.js 快速入門 技術(shù)棧 前端: 用戶端:vue、iview admin端:vue、...
閱讀 1792·2021-10-18 13:34
閱讀 3981·2021-09-08 10:42
閱讀 1611·2021-09-02 09:56
閱讀 1661·2019-08-30 15:54
閱讀 3198·2019-08-29 18:44
閱讀 3352·2019-08-26 18:37
閱讀 2285·2019-08-26 12:13
閱讀 525·2019-08-26 10:20