我想從我的 mongo 資料庫中獲取一個 ObjectId,但是使用 async/await,我得到一個錯誤:
錯誤 [ExceptionsHandler] 查詢已執行: Role.findOne({ name: { '$in': [ 'admin' ] } }) MongooseError: 查詢已執行: Role.findOne({ name: { '$in': [ '行政' ] } })
我想異步呼叫貓鼬,因為當我想在此代碼塊之后使用它時,我的userRoles陣列為空;
這是代碼 role.guard.ts
[...]
async canActivate(context: ExecutionContext): Promise<boolean> {
const userRoles: string[] = [];
let accessRoleId = '';
let isAuthorized = false;
const accessRole = this.reflector.get<string[]>('roles', context.getHandler());
if (!accessRole) {
return true;
}
const request = context.switchToHttp().getRequest();
const user = request.user;
for (let i = 0; i < user.roles.length; i ) {
const role: string = user.roles[i]
userRoles.push(role);
}
const findId = await this.RoleModel.findOne({ 'name': accessRole }
, (err, role) => {
if (err){
console.log(err);
}
else {
console.log('role ->', role._id.valueOf()); // role -> 621268634b936e81528bc220
accessRoleId = role._id.valueOf();
}
});
[...]
}
任何想法?謝謝!
uj5u.com熱心網友回復:
您要么使用回呼,要么使用承諾。
回呼:
const findId = this.RoleModel.findOne({ 'name': accessRole }
, (err, role) => {
if (err){
console.log(err);
}
else {
console.log('role ->', role._id.valueOf()); // role -> 621268634b936e81528bc220
accessRoleId = role._id.valueOf();
}
承諾:
try {
const role = await this.RoleModel.findOne({ 'name': accessRole });
console.log('role ->', role._id.valueOf()); // role -> 621268634b936e81528bc220
accessRoleId = role._id.valueOf();
} catch(err) {
console.log(err);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/431854.html
