如何调用外部 API 然后 return 来自 hapi.js Api 中的数据
How to call an external API then return this data from an in hapi.js Api
我是 Hapi.js 节点扩展的新手。
我正在尝试将外部 API 调用到我的服务器中,因为外部 API 受 CORS 保护,我无法从我的前端调用它 (Angular 9) .
所以我用路由等设置了我的 hapi 服务器,现在在一个路由中我试图导入外部数据,当前端调用我的 hapi api 它显示来自外部的数据 API。
我没有找到关于这个问题的任何文档或主题,如果你能给我提供一些信息,那将非常有帮助!
(我想从路线 solcast 进行外部 API 调用)
这是我的 index.js :
'use strict';
require('dotenv').config()
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: 'localhost',
routes: {
cors: true
}
});
server.route(require('./routes/base').test);
server.route(require('./routes/solcast').solcast);
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
这是我的 solcast.js :
这时 console.log 错误:
Error: handler method did not return a value, a promise, or throw an error
然后是console.log数据。我假设 return 完成后没有收到数据。
const joi = require('@hapi/joi');
const fetch = require("node-fetch");
exports.solcast = {
method: 'GET',
path: '/solcasttest',
handler: (request, h) => {
fetch("https://linkToTheExternalApi")
.then(response => response.json())
.then(data => {
console.log(data)
return data
})
.catch(err => console.log(err))
console.log(testSolcast)
}
}
感谢您的帮助,如果您需要任何其他信息,请与我联系。
正如抛出的错误所暗示的那样,hapi.js
中的 handler
必须 return 一个值、一个承诺或抛出一个错误。
在你的例子中,handler
是一个异步操作,所以你必须 return 一个承诺。
由于 fetch
已经创建了一个承诺,如果您 return 在您的处理程序中由 fetch
创建的承诺就足够了:
const fetch = require("node-fetch");
exports.solcast = {
method: 'GET',
path: '/solcasttest',
handler: (request, h) => {
return fetch("https://linkToTheExternalApi")
.then(response => response.json())
.then(data => {
console.log(data)
return data
})
.catch(err => console.log(err));
}
}
我是 Hapi.js 节点扩展的新手。
我正在尝试将外部 API 调用到我的服务器中,因为外部 API 受 CORS 保护,我无法从我的前端调用它 (Angular 9) .
所以我用路由等设置了我的 hapi 服务器,现在在一个路由中我试图导入外部数据,当前端调用我的 hapi api 它显示来自外部的数据 API。
我没有找到关于这个问题的任何文档或主题,如果你能给我提供一些信息,那将非常有帮助!
(我想从路线 solcast 进行外部 API 调用)
这是我的 index.js :
'use strict';
require('dotenv').config()
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: 'localhost',
routes: {
cors: true
}
});
server.route(require('./routes/base').test);
server.route(require('./routes/solcast').solcast);
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
这是我的 solcast.js :
这时 console.log 错误:
Error: handler method did not return a value, a promise, or throw an error
然后是console.log数据。我假设 return 完成后没有收到数据。
const joi = require('@hapi/joi');
const fetch = require("node-fetch");
exports.solcast = {
method: 'GET',
path: '/solcasttest',
handler: (request, h) => {
fetch("https://linkToTheExternalApi")
.then(response => response.json())
.then(data => {
console.log(data)
return data
})
.catch(err => console.log(err))
console.log(testSolcast)
}
}
感谢您的帮助,如果您需要任何其他信息,请与我联系。
正如抛出的错误所暗示的那样,hapi.js
中的 handler
必须 return 一个值、一个承诺或抛出一个错误。
在你的例子中,handler
是一个异步操作,所以你必须 return 一个承诺。
由于 fetch
已经创建了一个承诺,如果您 return 在您的处理程序中由 fetch
创建的承诺就足够了:
const fetch = require("node-fetch");
exports.solcast = {
method: 'GET',
path: '/solcasttest',
handler: (request, h) => {
return fetch("https://linkToTheExternalApi")
.then(response => response.json())
.then(data => {
console.log(data)
return data
})
.catch(err => console.log(err));
}
}