这里是在简书仿简书的第六篇,早睡早起身体好
用户名密码
我想要这样的接口
请求示例:
{
"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进行测试。
至此,第一个接口也就完成了。
网友评论