koa2请求返回数据404

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值