将 async/await 与 mongoose 一起使用时出现错误
when using async/await with mongoose i get an error
我想从我的 mongo 数据库中获取一个 ObjectId,但是使用 async / await,我得到一个错误:
错误 [ExceptionsHandler] 查询已执行:Role.findOne({ name: { '$in': [ 'admin' ] } })
MongooseError:查询已执行:Role.findOne({ name: { '$in': [ 'admin' ] } })
我想异步调用 mongoose,因为我的 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();
}
});
[...]
}
有什么想法吗?谢谢!
您可以使用回调或承诺。
回调:
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);
}
我想从我的 mongo 数据库中获取一个 ObjectId,但是使用 async / await,我得到一个错误:
错误 [ExceptionsHandler] 查询已执行:Role.findOne({ name: { '$in': [ 'admin' ] } }) MongooseError:查询已执行:Role.findOne({ name: { '$in': [ 'admin' ] } })
我想异步调用 mongoose,因为我的 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();
}
});
[...]
}
有什么想法吗?谢谢!
您可以使用回调或承诺。
回调:
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);
}