eggjs 怎么实现用户注册功能?

网友投稿 797 2022-10-17

eggjs 怎么实现用户注册功能?

eggjs 怎么实现用户注册功能?

实现注册接口

大致流程:

1、配置路由接口

通过在 router.js 将接口抛出

'use strict';/** * @param {Egg.Application} app - egg application */module.exports = app => { const { router, controller } = app; // 注册路由 router.post('/api/user/register', controller.user.register);};

2、获取账号密码

我们首先需要获取到用户填写的账号密码,在 controller 目录下新建 user.js 用于处理用户逻辑相关的代码。

// 获取注册时的 username, passwordconst { username, password } = ctx.request.body;

3、进行账号密码校验

1、判断两个参数是否为空

// 1、判空操作if (!username || !password) { ctx.body = { status: 500, desc: '账号密码不能为空', data: null } return}

2、需要根据用户传入的 username 去数据库的 user 表查询,是否已经被注册。

在 service 文件夹里 新增 user.js 文件。

'use strict';const Service = require('egg').Service;class UserService extends Service { // 通过用户名获取用户信息 async getUserByName(username) { const { app } = this; try { const result = await app.mysql.get('user', { username }); return result; } catch(error) { console.log(error); return null; } }}module.exports = UserService;

在 controller 里 user.js 继续添加逻辑

// 2、验证数据库内是否已经有该账户名const userInfo = await ctx.service.user.getUserByName(username);// 判断是否已经存在if(userInfo && userInfo.id) { ctx.body = { status: 500, desc: '账户名已被注册,请重新输入', data: null } return}

4、将数据存入数据库

添加写入数据库的方法:在 service 文件夹 user.js 文件 里添加注册 register 方法。

// 注册async register(params) { const { app } = this; try { const result = await app.mysql.insert('user', params); return result; } catch(error) { console.log(error); return null; }}

在 controller 里 user.js 继续添加逻辑,完整的代码如下

'use strict';const Controller = require('egg').Controller;// 默认头像const defaultAvatar = 'UserController extends Controller { async register() { try { const { ctx } = this; // 获取注册时的 username, password const { username, password } = ctx.request.body; console.log('注册获取参数', username, password) // 1、判空操作 if (!username || !password) { ctx.body = { status: 500, desc: '账号密码不能为空', data: null } return } // 2、验证数据库内是否已经有该账户名 const userInfo = await ctx.service.user.getUserByName(username); // 判断是否已经存在 if(userInfo && userInfo.id) { ctx.body = { status: 500, desc: '账户名已被注册,请重新输入', data: null } return } // 3、调用 service 方法,将数据存入数据库。 const result = await ctx.service.user.register({ username, password, signature: '这个人很懒,没什么留言', avatar: defaultAvatar, ctime: new Date() }); console.log('数据存入数据库--->', result); if (result) { ctx.body = { status: 200, desc: '注册成功', data: null } } else { ctx.body = { status: 500, desc: '注册失败', data: null } } } catch (error) { ctx.body = { status: 500, desc: '注册失败', data: null } } }}module.exports = UserController;

测试注册接口

首先需要将 ctime 字段改成 datetime 类型,上一次忘记改了。

1、测试不传账号密码

我们打开 postman 输入 post 请求 ​​,填写上请求参数,账号,跟密码不填写值,结果返回如下:

2、测试输入正常的账号密码

显示注册成功之后,我们去本地数据库看看 user 表里是否有数据。

3、测试输入重复的账号

说明

这个只是实现了简单的注册功能,实际生产是不会这么简单的,可能会涉及到密码的加密传输,验证码的校验等等。

​​【项目:kaimo-cost-server】代码地址​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Cangol-UIFrame- Android 菜单框架
下一篇:Netty事件循环主逻辑NioEventLoop的run方法分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~