用koa2写了个register的post请求,后端确实收到了参数,也写入数据库了,但是返回给前端的时候出了问题,前端报404拿不到返回的数据。具体原因跟koa2的异步请求有关,async await返回的是异步结果,所以在post回掉函数内也要用异步获取数据返回,否则同步获取是拿不到数据的,前端也就显示404了
具体代码就贴一下,大家可以参考下:
const fnRegister = async (ctx, next) => {
const { username, password } = ctx.request.body;
// 查询用户是否存在
const userResult = await UserModel.find({username});
if (userResult.length) {
ctx.body = { code: 1, msg: '用户名已存在' };
return;
}
// 写入mongoDB
const User = new UserModel({ username, password });
await User.save().then(() => {
return ctx.body = { code: 0, msg: '注册成功' }
}).catch((error) => {
return ctx.body = { code: 1, msg: '注册失败' }
})
}
要注意的就是这两句
const userResult = await UserModel.find({username});
await User.save()
因为是在异步函数里面,await的作用是等待后面的语句执行完再执行下一个
还有一点值得注意的是有些朋友可能会这样写:
const fnRegister = async (ctx, next) => {
const { username, password } = ctx.request.body;
// 查询用户是否存在
await UserModel.findOne({username}, (err, doc) => {
if(doc) {
return ctx.body = { code: 1, msg: '用户名已存在' };
} else {
const User = new UserModel({ username, password });
User.save().then(() => {
return ctx.body = { code: 0, msg: '注册成功' }
}).catch((error) => {
return ctx.body = { code: 1, msg: '注册失败' }
})
}
});
}
这个写法试了下是错误的,await后面的函数体内无法再使用await,前端仍然拿不到数据,报404错误,具体还在研究
来源:CSDN
作者:倪好坏
链接:https://blog.csdn.net/weixin_42821179/article/details/104060074