创建HAPI路由前提条件以从REST API中获得一些价值

时间:2018-07-12 11:20:15

标签: node.js hapijs

如何创建从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 个答案:

答案 0 :(得分: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来执行此操作。使用该代码将产生如下代码:

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);
      });
    });
}