eggjs 怎么实现用户注册功能?
Posted 凯小默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, password
const 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 = 'https://profile.csdnimg.cn/A/C/5/1_kaimo313';
class 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 请求 http://127.0.0.1:7001/api/user/register
,填写上请求参数,账号,跟密码不填写值,结果返回如下:
2、测试输入正常的账号密码
我们输入自己要注册的账号密码,比如输入 username :kaimo313,password:123456。点击发送:效果如下
显示注册成功之后,我们去本地数据库看看 user 表里是否有数据。
在 DBeaver 中,我们右击 user 表然后点击刷新:就能看到我们刚刚添加的数据
3、测试输入重复的账号
我们在第二步的基础上不改信息,继续点击发送,此时,kaimo313 这个账号已经在数据库里存在了,效果如下:
说明
这个只是实现了简单的注册功能,实际生产是不会这么简单的,可能会涉及到密码的加密传输,验证码的校验等等。
以上是关于eggjs 怎么实现用户注册功能?的主要内容,如果未能解决你的问题,请参考以下文章