Node.js - функции вызова javascript из файла javascript - PullRequest
0 голосов
/ 09 ноября 2019

Я работаю над проектом Express / NodeJs. Я новичок в Express / NodeJs, я пытаюсь импортировать airportQuery.js в DistanceFormula.js. Я пытаюсь напрямую импортировать airportQuery.js из DistanceFormula.js. Я пытаюсь вызвать getAirports и вернуть ответ на DistanceFormula.js. Я не уверен, должен ли я использовать маршрутизацию узла или я делаю это правильно.

Структура файла: Структура файла

DistanceFormula.JS

import {getAirports} from "./api/airportQuery";
console.log(getAirports('3c675a'));

AirportQuery.js

async function getAirports(planeIcao) {
        let airport = {
            arrival: "",
            destination: ""
        };
        const airport_url = 'https://opensky-network.org/api/flights/aircraft?icao24=' + planeIcao + '&begin=1517184000&end=1517270400';
        const response = await fetch(airport_url);
        const data = await response.json();
        console.log(data[0]);
        console.log(data[0].estArrivalAirport);
        airport.arrival = data[0].estArrivalAirport;
        console.log(data[0].estDepartureAirport);
        airport.destination = data[0].estDepartureAirport;
        return airport
    }
const fetch = require("node-fetch");

export {getAirports};

ОШИБКА: UncaughtSyntaxError: Невозможно использовать оператор импорта вне модуля

1 Ответ

0 голосов
/ 09 ноября 2019

Чтобы использовать модули в node.js, вы должны сделать следующее:

  1. Запустить версию nodejs, которая поддерживает модули ESM (v8.5 +).
  2. Запустите с этим флагом командной строки: node --experimental-modules
  3. Назовите ваш файл с расширением .mjs ИЛИ укажите его как модуль в package.json

См. соответствующую документацию для получения дополнительной информации.

Это верно не только для файла верхнего уровня, который вы import, но если он также использует import, то те же правила выше имеюти к нему применимы.


Обратите внимание, что после правильной загрузки модулей у вас возникнет проблема с этой строкой кода, поскольку getAirports() возвращает обещание, а не значение. Все функции async всегда возвращают обещание. Значение return в функции станет разрешенным значением возвращенного обещания. Вот как работают async функции. Итак, измените это:

console.log(getAirports('3c675a'));

На это:

getAirports('3c675a').then(result=> {
    console.log(result);
}).catch(err => {
    console.log(err);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...