javascript - 如何调用外部 API,然后从 hapi.js Api 返回此数据

标签 javascript node.js rest hapi.js

我是 Hapi.js Node 扩展的新手。

我正在尝试将外部 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 数据。我假设返回完成后没有收到数据。

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 中的处理程序必须返回一个值、一个 promise 或抛出一个错误。

在您的情况下,处理程序是一个异步操作,因此您必须返回一个 promise 。

由于 fetch 已经创建了一个 Promise,因此如果您在处理程序中返回由 fetch 创建的 Promise 就足够了:

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

关于javascript - 如何调用外部 API,然后从 hapi.js Api 返回此数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61234397/

相关文章:

javascript - 在 nodejs 中追加列出 ajax 结果

php - 如何在 Laravel 5 中验证 RESTful API?

java - 如何从 REST 服务生成实体?

javascript - 使用 http/https 时是否有识别 'Domain not Owned' 站点的标准方法?

javascript - 平板电脑纵向/横向切换不重新执行 jQuery?

javascript - 连接到 php 类时出现 ajax 错误

javascript - 为什么固定导航会跳转?

node.js - Node 生成器 : Using yield at top-level

c# - 使用日期将 JQuery JSON 发送到 WCF REST

javascript - 动态 html 表格,但标题位于底部