Измените это:
await rp('https://api.myjson.com/bins/7jau8')
на это:
return rp('https://api.myjson.com/bins/7jau8')
Вам необходимо вернуть что-то полезное из функции exports.RequestUserPermissions
. В нынешнем виде нет возвращаемого значения из этой функции, что означает, что возвращаемое обещание будет иметь undefined
разрешенное значение, которое, по-видимому, является тем, что вы испытываете.
Затем я бы предложил использовать .catch()
для условия ошибки. И вам нужно разрешить вызывающей стороне видеть ошибку (вероятно, как отклоненное обещание), чтобы он мог знать, когда есть ошибка.
Я бы предложил это:
const rp = require('request-promise');
exports.RequestUserPermissions = function(role, next) {
return rp('https://api.myjson.com/bins/7jau8').then(response => {
const permissionsResponse = JSON.parse(response);
const filteredPermissions = permissionsResponse.find(function(x) {
return Object.keys(x).indexOf(role) > -1;
});
console.log(filteredPermissions); // I GET UNDEFINED HERE.
return filteredPermissions;
}).catch(error => {
console.log(error);
next(error);
throw error;
});
};
Спецификация именно того, что вы хотите, немного запутана. Чтобы иметь возможность проверять вещи с помощью URL, который вы мне дали, я создал здесь простую автономную программу для узлов. Это ищет один соответствующий role
и возвращает это. Если подходящая роль не найдена, она разрешается до null
. Вы также можете сделать это отклонение, в зависимости от того, как вызывающий не хочет, чтобы подходящая роль работала.
const rp = require('request-promise');
function getRole(role) {
return rp({uri: "https://api.myjson.com/bins/7jau8", json: true}).then(data => {
// need to find the matching role
// apparently role can be a string or an array of strings
for (let item of data) {
if (item[role]) {
return item[role];
}
}
return null;
});
}
getRole("admin").then(data => {
console.log(data);
}).catch(err => {
console.log(err);
});
Когда я запускаю это, я получаю такой вывод:
{ static:
[ 'posts:list',
'posts:create',
'posts:edit',
'posts:delete',
'users:get',
'users:getSelf',
'home-page:visit',
'dashboard-page:visit' ]
}
Надеюсь,Можете ли вы использовать эту модификацию в соответствии с вашими другими потребностями.
Примечание: я использую опцию json:true
с rp()
, поэтому она автоматически проанализирует ответ JSON для меня.