koa2请求返回数据404

北战南征 提交于 2020-01-21 17:17:55

用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错误,具体还在研究

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!