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

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

实现注册接口


大致流程:

709f123899a1422cbc4cc11246e35ef9.png



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

7db2e62bf2a64881ab66fee24a3f6847.png


1、测试不传账号密码

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

7e771f3f14554ea49189f5fc6e15750a.png



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

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

387b75cdd6924e489cfe8ce9dc5a79d1.png



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

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


91f6e6e8a78947fe9b5883f6ae33b9ce.png


3、测试输入重复的账号

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

e6311bca7be0494b92869647cab2f808.png


说明

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

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












目录
相关文章
|
前端开发 JavaScript Java
【Layui】入门必看:登录注册界面搭建与功能开发解析
Layui是一款面向前端开发者的轻量级JavaScript库,旨在简化网页开发过程。它提供了丰富的基础UI组件和常用的工具函数,使开发者可以更快速地构建出优秀的网页界面。Layui具备以下特点和功能:简洁易用:Layui的设计理念是简洁而易用,它提供了直观的API和简单的配置,使开发者可以更快速地上手并快速构建界面。模块化加载:Layui采用模块化的加载方式,每个功能都是以独立的模块形式存在,开发者可以根据自己的需求按需加载所需的模块,避免了不必要的资源浪费。基础UI组件。
|
4月前
|
前端开发 JavaScript Serverless
中后台前端开发问题之通过低代码实现前后端交互如何解决
中后台前端开发问题之通过低代码实现前后端交互如何解决
49 0
|
7月前
|
Java 数据库连接 数据库
用户注册功能实现及代码优化案例
用户注册功能实现及代码优化案例
154 0
|
3月前
|
存储 前端开发 Java
谷粒商城笔记+踩坑(19)——订单模块构建、登录拦截器
首先搭建页面环境,然后介绍整合Spring Session的相关内容,并将用户信息放到session里,多线程优化,完成订单模块的功能、登录拦截等功能的实现
谷粒商城笔记+踩坑(19)——订单模块构建、登录拦截器
|
前端开发 API
前端如何写后台管理系统登录验证详细流程和代码
后台管理系统是公司必备的,从前些年由于技术人员的稀有,导致后台系统非常昂贵,近些年IT行业的快速发展,使得一些中小型公司开始自己写后台,自己维护,从而获取利益的最大化。
309 0
前端如何写后台管理系统登录验证详细流程和代码
|
前端开发 JavaScript API
重撸后台管理系统的小体会
重撸后台管理系统的小体会
73 0
|
前端开发
前端学习笔记202304学习笔记第六天-了解组件的的两种注册方式
前端学习笔记202304学习笔记第六天-了解组件的的两种注册方式
72 0
|
数据库
eggjs 怎么实现获取用户信息接口?
eggjs 怎么实现获取用户信息接口?
174 0
eggjs 怎么实现获取用户信息接口?
|
前端开发 JavaScript
eggjs 怎么实现上传图片(头像)接口功能?
eggjs 怎么实现上传图片(头像)接口功能?
303 0
eggjs 怎么实现上传图片(头像)接口功能?
|
前端开发 JavaScript API
不使用第三方库怎么实现【前端引导页】功能?
不使用第三方库怎么实现【前端引导页】功能?
261 0