koa 2はデータを返すように要求する404.

1600 ワード

Coa 2でregisterのpost要求を書きましたが、バックエンドは確かにパラメータを受け取り、データベースにも書き込みましたが、フロントエンドに戻ると問題が発生し、フロントエンド新聞404は戻りのデータを取れませんでした.具体的な原因は、koa 2の非同期要求に関係しています.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: '    ' }
  })
}
注意したいのはこの2つです.
 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エラーを報告しました.具体的にはまだ研究しています.