node.js - 创建 HAPI 路由先决条件以从 REST API 中获取一些价值
问题描述
如何创建路由先决条件以从 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;
}
解决方案
您似乎想在代码继续之前等待 HTTP 请求完成?在这种情况下,您需要将 getCount 设为异步函数,并等待获取请求。您还应该使用 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);
});
});
}
推荐阅读
- javascript - 在每次 API 调用之前验证 JWT 令牌
- ubuntu - LXC - 无法创建 macvlan 接口 - 不允许操作
- java - 污染源 JAVA
- regex - Mac OS 使用 sed 将多行替换为一个字符
- android - 如何在 Flutter 上获取其他应用的通知数据?
- amazon-ecs - AWS Ecs 任务运行错误 无法运行任务 在您的集群中找不到容器实例
- cmake - 如何使用 g++ 和 CMake 启用整个程序优化
- python - Login trouble with Selenium
- python - Why are my radio buttons in Tkinter not returning values?
- selenium - 当前目录下不存在chromedriver.exe文件