Как вызвать внешний API и вернуть эти данные из хапи. js Api - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в расширении узла Хапи. js.

Я пытаюсь вызвать внешний API на моем сервере, потому что внешний API защищен с помощью CORS, и я не могу вызвать его с моего фронта (Angular 9).

Итак, я настроил свой хапи-сервер с маршрутами и т. Д. c, и теперь в маршруте я пытаюсь импортировать внешние данные, и когда фронтальный вызывает маршрут моего хапи-API, он показывает данные из внешнего API.

Я не нашел ни документации, ни разделов по этой проблеме, если бы вы могли предоставить мне некоторую информацию, это было бы очень полезно!

(я хочу сделать свой внешний вызов API из маршрута solcast)

Это мой индекс. 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)

    }

}

Спасибо за вашу помощь, если вам нужна какая-либо другая информация, поразите меня.

1 Ответ

1 голос
/ 15 апреля 2020

Как подсказывает выданная ошибка, handler в hapi.js должен возвращать значение, обещание или выдавать ошибку.

В вашем случае handler является асинхронной операцией, поэтому вы должен вернуть обещание.

Поскольку 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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...