Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何调用外部API,然后从in-hapi.js API返回此数据_Javascript_Node.js_Rest_Hapijs - Fatal编程技术网

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

Javascript 如何调用外部API,然后从in-hapi.js API返回此数据,javascript,node.js,rest,hapijs,Javascript,Node.js,Rest,Hapijs,我不熟悉Hapi.js节点扩展 我正在尝试将外部API调用到我的服务器中,因为外部API受CORS保护,我无法从前端调用它(Angular 9) 因此,我用路由等设置了我的hapi服务器,现在在一个路由中,我尝试导入外部数据,当前端调用我的hapi api的路由时,它会显示来自外部api的数据 我没有找到关于这个问题的任何文档或主题,如果你能提供一些信息,那将非常有帮助 (我想从路由solcast执行外部API调用) 这是我的索引.js: 'use strict'; require('dote

我不熟悉Hapi.js节点扩展

我正在尝试将外部API调用到我的服务器中,因为外部API受CORS保护,我无法从前端调用它(Angular 9)

因此,我用路由等设置了我的hapi服务器,现在在一个路由中,我尝试导入外部数据,当前端调用我的hapi api的路由时,它会显示来自外部api的数据

我没有找到关于这个问题的任何文档或主题,如果你能提供一些信息,那将非常有帮助

(我想从路由solcast执行外部API调用)

这是我的索引.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
然后记录数据。我假设返回完成时没有收到数据

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

在您的例子中,
处理程序
是一个异步操作,因此您必须返回一个承诺

由于
fetch
已经创建了一个承诺,如果在处理程序中返回由
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));
    }
}