Создайте предварительное условие маршрута HAPI для получения некоторого значения из API REST
Как создать предварительное условие для получения некоторого значения из REST API? Как реализовать функцию getCount, чтобы дождаться ответа API и использовать ее в функции обработчика маршрута? (Обратите внимание, что я использую Hapi 8.3.1)
server.route({
method: 'GET',
path: '/products',
config: {
state: {
failAction: 'ignore'
},
pre:[{method:getCount, assign: 'count'}],
handler: function (request, reply) {
console.log(request.pre.count);
reply({products}).code(200);
}
}
});
function getCount(request, reply){
http.get('/products/count/')
// how to implement this to wait till get product count;
}
1 ответ
Похоже, вы хотите дождаться завершения HTTP-запроса, прежде чем код продолжится? В этом случае вам нужно сделать getCount асинхронной функцией и дождаться запроса get. Вы также должны использовать fetch() вместо http.get(). Итак, вы бы в конечном итоге с этим:
server.route({
method: 'GET',
path: '/products',
config: {
state: {
failAction: 'ignore'
},
pre:[{method:getCount, assign: 'count'}],
handler: function (request, reply) {
console.log(request.pre.count);
reply({products}).code(200);
}
}
});
async function getCount(request, reply){
let count = await fetch('/products/count/');
return count;
}
Это будет ожидать завершения запроса до возврата значения. Также возможно использовать.then() и Promises, чтобы сделать это, если версия вашего узла не поддерживает async/await. Использование этого даст код, подобный этому:
server.route({
method: 'GET',
path: '/products',
config: {
state: {
failAction: 'ignore'
},
pre:[{method:getCount, assign: 'count'}],
handler: function (request, reply) {
console.log(request.pre.count);
reply({products}).code(200);
}
}
});
function getCount(request, reply){
return new Promise(function (resolve, reject) {
fetch('/products/count/').then(function(result) {
resolve(result);
}).catch(function (err) {
reject(err);
});
});
}