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エラーを報告しました.具体的にはまだ研究しています.