Модуль Node.js импортирует работу только в файловой иерархии верхнего уровня - PullRequest
0 голосов
/ 22 июня 2019

Я создаю сервер Graphql с использованием Express и Mongoose для сервиса среднего уровня и имею структуру проекта, такую ​​как

-models
---user.js
---messages.js
---index.js
-resolvers/
-schema/
-index.js

с index.js в качестве точки входа. Я пытаюсь экспортировать модуль из src / models / index.js в src / models / user.js и src / models / messages.js.

В настоящее время я экспортирую функцию для подключения к базе данных из src / models / index.js в src / index.js, которая работает отлично. Но попытка импортировать один и тот же экспорт в одну и ту же директорию (папку моделей) делает модуль недоступным.

Казалось бы, изменив синтаксис на

export function getDatabaseConnections (dbName) {
...
}

работает для распознавания функции внутри src / models / user.js, но переменная соединений остается неопределенной внутри файлов независимо от синтаксиса экспорта.

ЦСИ / модели / index.js

var connections = {};
const connectToDB = () => {
    return mongoose.connect(mongo_uri, { useNewUrlParser: true});
};

const getDatabaseConnections = (dbName) => {
  if(connections[dbName]) {
    return connections[dbName];
  } else {
    // if the connection object doesn't already exist, create and return
    connections[dbName] = mongoose.createConnection(mongo_uri, { useNewUrlParser: true });
    return connections[dbName];
  }
};

const models = { User, Message };

export { connectToDB, getDatabaseConnections, connections };

export default models;

Импорт в src / index.js, который работает.

import models, { connectToDB, getDatabaseConnections, connections } from './models';
connectToDB(); // this functions properly
console.log(connections) // functions
getDatabaseConnections('dbName') // functions

Внутри src / models / user.js

import { connectToDB, getDatabaseConnections, connections } from './index';
connectToDB(); // fails
console.log(connections) // fails
getDatabaseConnections('dbName') // fails

Внутри src / models / message.js я получаю TypeError: (0, _index.getDatabaseConnections) не является функцией, но я ожидаю, что импорт будет работать так же, как и в точке входа приложения.

1 Ответ

0 голосов
/ 24 июня 2019

Это из-за круговой зависимости от импорта.Models / index.js импортируется из models / user.js, но я пытаюсь использовать модуль index внутри user.js.Нет гарантии порядка разрешения модулей, поэтому он отображается пустым внутри user.js.

...