egg实现用户信息获取、修改

161 阅读1分钟

前面几节我们链接了数据库,进行了路由鉴权,接下来我们实现关于用户相关的操作, 需要获取用户基本信息, 并且编辑更新这些信息

获取用户基本信息

router

首先我们还是在router 中新加一条路有

router.get('/user/getinfo', jwterror, controller.user.getUserInfo);

controller

然后在controller的user中定义定义基本的业务操作

async getUserInfo() {
    const { ctx, app } = this;
    const { header: { token } } = ctx;
    const userinfo = app.jwt.verify(token, app.config.jwt.secret);
    const result = await ctx.service.user.getUserById(userinfo.id);
    console.log(result);
    const { username, ctime, nickname } = result;
    ctx.body = {
      code: 200,
      msg: '成功',
      data: {
        username,
        ctime,
        nickname,
      },
    };
  }

我们解析token 来获取到用户的id, 然后通过id去user表查询用户的基本信息, 所以接下来我们需要在service中去定义一个getUserById方法来实现通过id 查询用户数据

service

async getUserById(id) {
    const { app } = this;
    const result = await app.mysql.get('user', { id });
    return result;
  }

修改用户信息

修改数据的思路与上面一样, 不同的只是上面是在数据库user表中读取数据, 修改需要的是更新数据

router

 router.post('/user/updateinfo', jwterror, controller.user.updateUserInfo);

controller

async updateUserInfo() {
    const { ctx, app } = this;
    const { header: { token } } = ctx;
    const userinfo = app.jwt.verify(token, app.config.jwt.secret);
    const result = await ctx.service.user.updateUserInfo(userinfo.id, ctx.query);
    ctx.body = { result };

  }

位了方便, 上面直接是更新的所有提交的数据updateUserInfo(userinfo.id, ctx.query), 我们主要看一下下面service中的updateUserInfo方法

service

async updateUserInfo(id, params) {
    const { app } = this;
    const result = await app.mysql.update('user', params, {
      where: { id },
    });
    const state =
      result.affectedRows === 1 ? 'sucess' : 'fail';
    return state;
  }

我们通过result.affectedRows来判断更新是否成功

基础的路由功能实现差不多都是这个逻辑, 后面更多的api其实都可以参考这三步实现