egg.js 配置 mysql 以及简单登录实现

在这里插入图片描述

目录

  1. egg.js 配合 jwt 进行鉴权
  2. egg.js 配置 mysql 以及简单登录实现
  3. eggjs+mysql实现图片上传
  4. eggjs 实现增删改查
  5. eggjs 搭配 vue+axios 实现登录和获取用户信息

开发

eggjs 的部署以及安装

eggjs 添加 mysql

npm install egg-mysql

安装以后,打开 conifg -> plugin.js , 加入

mysql: {
    enable: true,
    package: 'egg-mysql',
 },

打开 config -> config.default.js,加入

 config.mysql = {
    // 单数据库信息配置
    client: {
      // host
      host: 'localhost',
      // 端口号
      port: '3306',
      // 用户名
      user: 'root',
      // 密码
      password: 'root', 
      // 数据库名
      database: 'xxx', 
    },
    app: true,
    agent: false,
 };

这时候配置大概完成,我们写一个用户登录的逻辑.

创建 数据库 user `, 表结构为:
在这里插入图片描述

创建 app -> service -> user.js , 写入

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

创建 app -> controller -> user.js

// controller/user.js
'use strict';
const Controller = require('egg').Controller;
class UserController extends Controller {
  async login() {
    const { ctx, app } = this;
    const { username, password } = ctx.request.body;
    const userInfo = await ctx.service.user.getUserByName(username);
    if (!userInfo || !userInfo.id) {
      ctx.body = {
        code: 500,
        msg: '账号不存在',
        success: false,
        data: null,
      };
      return;
    }
    if (userInfo && password !== userInfo.password) {
      ctx.body = {
        code: 500,
        msg: '账号密码错误',
        success: false,
        data: null,
      };
      return;
    }
    // token 生成
    const token = app.jwt.sign(
      {
        id: userInfo.id,
        username: userInfo.username,
        exp: Math.floor(Date.now() / 1000) + 24 * 60 * 60, // token 有效期为 24 小时
      },
      app.config.jwt.secret
    );
    ctx.body = {
      code: 200,
      message: '登录成功',
      success: true,
      data: {
        token,
      },
    };
  },
  //获取个人信息
  async getUserInfo() {
    const { ctx, app } = this;
    const token = ctx.request.header.authorization;
    const decode = await app.jwt.verify(token, app.config.jwt.secret);
    // 通过 token 带过来的 username 获取到个人信息
    const userInfo = await ctx.service.user.getUserByName(decode.username);
    const defaultAvatar =
      'https://profile.csdnimg.cn/4/2/E/3_weixin_38992765';
    ctx.body = {
      code: 200,
      msg: '请求成功',
      data: {
        id: userInfo.id,
        username: userInfo.username,
        signature: userInfo.signature || '',
        avatar: userInfo.avatar || defaultAvatar,
        nickname: userInfo.nickname || '不知名先生',
      },
    };
  }
}
module.exports = UserController;

注册 router

 router.post('/api/user/login', controller.user.login);

现在验证效果 账号不存在在这里插入图片描述密码错误
在这里插入图片描述
登录成功
在这里插入图片描述

接下来,我们要根据 token 再去获取我们的人员信息等

注册 router ,用户获取个人信息

 router.get('/api/user/get_userinfo', _jwt, controller.user.getUserInfo); // 获取用户信息

获取个人信息
在这里插入图片描述
我们在写一个注册接口,在 app -> controller -> user.js 添加一个 register 方法

async register() {
    const { ctx } = this;
    const { username, password, nickname } = ctx.request.body; 
    const userInfo = await ctx.service.user.getUserByName(username); 
    // 判断是否已经存在
    if (userInfo && userInfo.id) {
      ctx.body = {
        code: 500,
        msg: '账户名已被注册,请重新输入',
        data: null,
        success: false,
      };
      return;
    }
    const defaultAvatar =
      'https://profile.csdnimg.cn/4/2/E/3_weixin_38992765';
    const result = await ctx.service.user.register({
      username,
      password,
      nickname,
      ctime: new Date().getTime(),
      signature: '暂无个人签名',
      avatar: defaultAvatar,
    });
    if (result) {
      ctx.body = {
        code: 200,
        msg: '注册成功',
        data: null,
        success: true,
      };
    } else {
      ctx.body = {
        code: 500,
        msg: '注册失败',
        data: null,
        success: false,
      };
    }
 }

注册router

 router.post('/api/user/register', controller.user.register);

注册验证
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值