Я являюсь фронтменом и делаю свой первый API с RBAC на основе Express + MongoDB.Мне нужно постобработать разрешения на роль, которые я получил с помощью функции ожидания.Пример (этот код прекрасно работает):
export async function getRoleById(req, res) {
try {
const role = await Role.findById(req.params.id)
.populate('permissions');
return res.status(HTTPStatus.OK).json(role);
} catch (err) {
return res.status(HTTPStatus.BAD_REQUEST).json(err);
}
}
Результат:
{
"id": "5c27d6bfc51081331411dcd8",
"name": "writer2",
"permissions": [
{
"id": "5c27c43e2eb0c279ccd945ef",
"action": "create",
"subject": "task"
},
{
"id": "5c27c4532eb0c279ccd945f1",
"action": "read",
"subject": "task"
}
]
}
Но мне нужен другой формат разрешений:
{
"id": "5c27d6bfc51081331411dcd8",
"name": "writer2",
"permissions": [
[ "create", "article" ],
[ "list", "user" ]
]
}
Поэтому я попытался сделать это:
export async function getRoleById(req, res) {
try {
const role = await Role.findById(req.params.id)
.populate('permissions')
.then((foundRole) => {
foundRole.permissions = foundRole.permissions.map(item => [ item.action, item.subject]);
return foundRole;
});
return res.status(HTTPStatus.OK).json(role);
} catch (err) {
return res.status(HTTPStatus.BAD_REQUEST).json(err);
}
}
Замена на exec не меняет ситуацию.После выполнения этого кода у меня есть ответ 200, но без каких-либо данных.Пустая страница вместо объекта с данными роли.
Я прочитал много статей о запросах Mongoose, и почему использование async / await с обратными вызовами некорректно.Заменить async / await на Promises неприемлемо в моей ситуации.Но что мне делать, чтобы получить результат, который мне нужен?