Как правильно экспортировать и требовать из родительского каталога в Nodejs? - PullRequest
0 голосов
/ 24 марта 2020

Я новичок в Nodejs и в тупик по поводу экспорта. Я прочитал несколько вопросов SO и различные посты в блоге, но мне не хватает чего-то, связанного с module.exports и требующих заявлений. У меня есть каталог сервера, настроенный следующим образом.

User/
|-- sqldb.js
|
|-- site1/
   |-- test.js
|
|-- site2/
   |-- foo.js
   |-- bar.js

sqldb. js - это модуль, который управляет пулом соединений с базой данных mysql, позволяя дочерним сайтам одновременно обращаться к родительской базе данных.

--- sqldb. js ---

// ... code and stuff ... 

async function initDB(){
    console.log("Initializing database");
}

async function addPlayers(players) {
    console.log("Add Players: ", players);
}

module.exports = {
    initDB,
    addPlayers
}

В тесте. js Я бы хотел require sqldb. js из родительского каталога, чтобы я мог вызвать функцию addPlayers.

--- test. js ---

const {sqldb} = require('../sqldb.js');

console.log("sqldb: ", sqldb);

var players = ['Bob', 'Samantha'];

sqldb.addPlayers(players);

Запись в sqldb показывает undefined, а затем вызов addPlayers на ней дает ожидаемый TypeError: Cannot read property 'addPlayers' of undefined ошибка.

Кто-нибудь может подсказать, как это исправить?

1 Ответ

2 голосов
/ 24 марта 2020

с использованием const {sqldb} = require ('../ sqldb. js'); указывает именованный импорт. Это работает, если у вашего sqldb. js есть метод с именем sqldb.

Поскольку у вас есть экспорт по умолчанию в sqldb. js, вы должны использовать:

Экспорт по умолчанию :

const sqldb = require ('../ sqldb. js')

и для доступа к addPlayers - используйте sqldb.addPlayers ();

Именованный экспорт:

или вы также можете использовать именованные экспорты, такие как:

const {addPlayers, initDB} = require ('../ sqldb. js') ;

тогда вы можете напрямую вызвать addPlayers ();

Надеюсь, это поможет!

...