【发布时间】:2019-02-28 14:28:27
【问题描述】:
我遇到了一个问题,我认为电话返回得太早,并且我的响应总是 404 - Not Found 消息。该条目是在数据库中创建的,因此我知道它会提前返回。我想我已经等待了正确的部分,但显然情况并非如此。我也尝试过在 db.AddUser 上等待,但没有运气。
端点
//Post signup
public async SignUpAsync(ctx: Context) {
try {
let code = await SignUpVerification.GenerateCode();
let user = await this.InfoFromRequest(ctx.request.body);
user.Code = code;
await db.AddUser(user);
console.log('added db user');
//await SignUpVerification.SendVerificationText(user.PhoneNumber, code)
console.log('success message');
ctx.body = 'Success';
} catch (err) {
ctx.status = 400;
ctx.body = err;
}
};
private async InfoFromRequest(requestBody: any) {
return {
Email: requestBody['email'],
FirstName: requestBody['firstname'],
MiddleName: requestBody['middlename'],
LastName: requestBody['lastname'],
Pwd: requestBody['pwd'],
PhoneNumber: requestBody['phonenumber']
} as IUserModel;
}
调用模型
async AddUser(newUser: IUserModel) {
return await userModel.AddUser(newUser);
}
模型调用
async AddUser(newUser: IUserModel) {
try {
var userToSave = new User({
name: {
firstname: newUser.FirstName,
middlename: newUser.MiddleName,
lastname: newUser.LastName
},
email: newUser.Email,
pwd: newUser.Pwd,
code: newUser.Code,
phonenumber: newUser.PhoneNumber
});
let result = await userToSave.save();
console.log('New User saved');
console.log(result);
} catch (err) {
throw new Error(err);
}
}
方法生成从模型调用返回的代码
static async GenerateCode() {
return await (Math.floor(Math.random() * 90000) + 10000).toString();
}
【问题讨论】:
-
如果我没记错的话,你的
SignUpAsync中间件应该返回一个 Koa 可以等待的承诺。也许return db.AddUser(user).then(? -
@Greg 我尝试了你所说的它仍然没有等待。我编辑代码以更好地反映执行此操作的方法。
-
@JoshuadeLeon 没有看到任何真正的问题。您能分享一下您是如何将
SignUpAsync中间件添加到应用程序的吗? -
旁白:使用
crypto.randomBytes()获取密码! -
Bonus2:GenerateCode 不需要异步,InfoFromRequest 也不需要。
标签: node.js typescript mongoose async-await koa