0
点赞
收藏
分享

微信扫一扫

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, 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 类型,上一次忘记改了。

eggjs 怎么实现用户注册功能?_数据库_02

1、测试不传账号密码

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

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

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

我们输入自己要注册的账号密码,比如输入 username :kaimo313,password:123456。点击发送:效果如下

eggjs 怎么实现用户注册功能?_数据_04

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

在 DBeaver 中,我们右击 user 表然后点击刷新:就能看到我们刚刚添加的数据

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

3、测试输入重复的账号

我们在第二步的基础上不改信息,继续点击发送,此时,kaimo313 这个账号已经在数据库里存在了,效果如下:

eggjs 怎么实现用户注册功能?_数据_06

说明

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

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


举报

相关推荐

0 条评论