,如前所述。最近在学习Egg.js。是阿里推出的基于Koa的节点开发框架,为企业级框架和应用而生。Egg.js的官方文档已经很完善了。如果想学习Egg.js,可以直接查看官方文档。因为平时的开发都是前后端分离的模式,所以就想着用Egg来创建后台服务,写一套API接口来配合其他项目。该项目的技术栈使用了Egg.js、MongoDB和mongoose。本文记录注册登录模块和用户中心模块的编写过程。目的是及时总结学习过程,锻炼文档能力,与大家分享交流,共同进步。项目地址:Egg-API项目持续更新中。喜欢的话请刷新、关注、star、fork,这些都是我长期坚持的动力(._.)?_以下是正文需求分析对于注册登录模块,需求分析如下:注册新用户,验证输入数据登录系统,需要验证输入数据,注销功能基于token认证登录后可在用户中心模块查看个人信息。在用户中心模块修改个人信息。数据分析与设计显性数据:userName:String用户名userPass:String账号密码userEmail:String用户邮箱telphone:String手机号avatar:String头像age:NumberAgesex:StringGenderCity:StringCity隐性数据:userRole:Number用户角色(1.普通用户,2.管理员,3.超级管理员,默认用户为普通用户,超级管理员创建数据库时创建)userCreate:Date用户创建时间lastLoginTime:Date上次登录时间lastloginaddressAPI分析设计下面的接口描述中,api是指接口名称,params是指传入的数据,code是指响应结果标识码,msg是指响应结果信息描述,data是指返回的数据通过成功的回应。注册接口api:/api/v1/signup(post)params:{userName:String,//用户名,uniqueuserPass:String,//用户密码userEmail:String,//用户邮箱}code:1.注册成功0:输入信息不完整或错误-1:注册失败,用户名已存在String,//用户名userPass:String,//用户密码}code:1.登录成功0:输入信息不完整或错误-1:用户不存在lastLoginTime:上次登录时间,lastLoginPlace:上次登录位置,}注销接口api:/api/v1/signout(get)code:1、注销成功,前端退出系统并清空tokenmsg:注销响应返回信息描述数据:{}查看个人信息接口api:/api/v1/user/userName(post,requestheaderwithtoken)params:{userName:String,}code:1,查询成功0,输入信息不完整-1,查询失败msg:查找个人信息返回信息描述data:{userName:用户名,userEmail:用户邮箱,age:年龄,city:城市,......}更改个人信息接口api:/api/v1/user/userName(put,token)params:{......//changedinformation}code:1,更新成功0,输入信息不完整或错误-1,更新失败msg:更新个人信息returninformationdescriptiondata:{userName:username,......}编码实现注意:编码实现说明只提供了部分,完整内容请移步Egg-API。假设你已经初始化了一个项目,该项目的目录结构协议与官方一致。一致因为我们要使用MongoDB数据库,所以首先要安装egg-mongoose,在配置文件中写入://config/plugin.jsexports.mongoose={enable:true,package:'egg-mongoose',};//config/config.default.jsconfig.mongoose={url:'mongodb://127.0.0.1/apiExample',options:{},};在模型文件夹中定义我们的模式文件:constUserSchema=newSchema({userName:{type:String,unique:true,required:true,},});路由定义:router.post('/api/v1/signup',controller.user.signup);Controller编写:用于解析用户Input,处理后返回相应的结果。我们可以将获取到的数据放入render中进行渲染,然后将渲染结果发送给浏览器,也可以直接将数据赋值给ctx.body,然后以json格式返回。classUserControllerextendsController{//登录asyncsignin(){const{ctx}=this;construle={userName:{type:'string',required:true,message:'required'},userPass:{type:'string',required:true,message:'required'},};constsigninMsg=ctx.request.body;等待ctx.validate(规则,signinMsg);signinMsg.userPass=ctx.helper.encrypt(signinMsg.userPass);constresult=awaitctx.service.user.signin(signinMsg);ctx.body=结果;}}服务编写:用于编写业务逻辑层,可以复用。复杂数据的处理,比如要展示的信息需要从数据库中获取,或者调用第三方服务。classUserServiceextendsService{//更新用户信息asyncupdateUser(userMsg){const{ctx}=this;const资源={};constresult=awaitctx.model.User.findByIdAndUpdate(userMsg._id,userMsg);水库代码=1;res.msg='用户信息已更改';res.data=结果;返回资源;}}一个简单的node应用结构是这样的,所以使用Egg.js来负责接口服务。
