【问题标题】:How to call an external API then return this data from an in hapi.js Api如何调用外部 API,然后从 in hapi.js Api 返回此数据
【发布时间】:2020-07-28 18:10:33
【问题描述】:

我是 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

这 while 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)

    }

}

感谢您的帮助,如果您需要任何其他信息,请联系我。

【问题讨论】:

    标签: javascript node.js rest hapijs


    【解决方案1】:

    正如抛出的错误所暗示的,hapi.js 中的 handler 必须返回一个值、一个承诺或抛出一个错误。

    在你的情况下,handler 是一个异步操作,所以你必须返回一个承诺。

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

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 2023-02-15
      • 2021-09-11
      • 2021-05-19
      • 2019-11-23
      • 2020-09-06
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多