06 | 设计用户注册接口

2020-10-11  本文已影响0人  cemcoe

这里是在简书仿简书的第六篇,早睡早起身体好

用户名密码

我想要这样的接口

POST https://jian.cemcoe.com/jianshu_api/users

请求示例:

{
    "name": "小可爱",
    "password": "cemcoe"
}

注册成功请求示例:

{
    "status": 200,
    "user": {
        "gender": "male",
        "bio": "该用户没有给自己编写简介",
        "avatar": "/uploads/default_avatar.png",
        "following": [],
        "_id": "5f7c5127354939e9ce5465a2",
        "name": "小可爱",
        "password": "cemcoe",
        "createdAt": "2020-10-06T11:12:39.664Z",
        "updatedAt": "2020-10-06T11:12:39.664Z",
        "__v": 0
    }
}

注册失败示例

{
    "status": 409,
    "message": "用户名已存在,换一个名字"
}

目前来讲,失败的原因只有用户名重复。


下面来实现一下,接口的开发流程是:


Slide1.jpg

用户的model,我们上一章已经搞过了,现在的重点是Controlls。基本逻辑前端ajax传JSON格式的数据来,发起HTTP POST请求,后端从POST请求中解析出用户名和密码,然后拿着用户名去数据库检查是否已经有该用户名,如果没有就将该用户信息存到数据库,并将用户信息返回。如果数据库中已有该用户名,则返回409状态码提醒用户换个用户名。

Slide2.jpg

核心是获取 POST 请求,借用 koa-body 来解析 post 请求,具体的配置参考官方文档。

配置好以后会将 POST 请求数据放到 ctx.request.body 中,比如用户名就可以这样获取 const { name } = ctx.request.body,同时对传来的数据进行了基础校验,借用的是 koa-parameter

// controllers/users.js
// 用户注册
  async create(ctx) {
    // 校验参数koa-parameter提供的功能
    ctx.verifyParams({
      name: { type: 'string', required: true },
      password: { type: 'string', required: true },
    })

    const { name } = ctx.request.body
    // koa-body 提供的 获取post请求的body功能
    const repeatedUser = await User.findOne({ name })
    if (repeatedUser) {
      // ctx.throw(409, '用户名已存在')
      // 登录成功返回token
      ctx.body = {
        status: 409,
        message: '用户名已存在,换一个名字',
      }
      return
    }
    const user = await new User(ctx.request.body).save()

    ctx.body = {
      status: 200,
      user,
    }
  }

可以使用postman进行测试。

至此,第一个接口也就完成了。

上一篇下一篇

猜你喜欢

热点阅读