NodeJS Модули экспортируют массив элементов, созданных классом - PullRequest
0 голосов
/ 20 марта 2020

В NodeJS я создаю экземпляры двух объектов из двух разных классов, помещаю их в массив и затем отображаю их с помощью Array.map. Если я делаю все это в одном файле, он работает нормально. Однако, если я создаю объекты в другом файле и экспортирую / требую массив, он становится неопределенным.

//code from file ClassA.js:

exports.ClassA = class ClassA {
    constructor(name) {       
        this.name = name;
    }
}

//code from file ClassB.js

exports.ClassB = class ClassB {
    constructor(name) {       
        this.name = name;
    }
}

Этот способ работает:

//code from file index.js
const { ClassA } = require("./ClassA");
const { ClassB } = require("./ClassB");

const myClassItem1 = new ClassA('Class A Item');
const myClassItem2 = new ClassB('Class B Item');

const myArray = [];
myArray.push(myClassItem1, myClassItem2);

console.log('array', myArray); //returns: [ ClassA { name: 'Class A Item' }, ClassB { name: 'Class B Item' } ]
console.log(myArray.map(item => item.name)); //returns: [ 'Class A Item', 'Class B Item' ]

// Отделение создание экземпляра в другом файле не

//code from file items.js
const { ClassA } = require("./ClassA");
const { ClassB } = require("./ClassB");

const myClassItem1 = new ClassA('Class A Item');
const myClassItem2 = new ClassB('Class B Item');

const myArray = [];
myArray.push(myClassItem1, myClassItem2);

console.log(myArray); //returns: [ ClassA { name: 'Class A Item' }, ClassB { name: 'Class B Item' } ]

exports.myArray;

//code from file index.js
const { myArray } = require('./items');

console.log(myArray); //returns undefined
console.log(myArray.map(item => item.name)) //throws error 

1 Ответ

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

Проблема в том, что строка

exports.myArray;

ничего не делает; он ссылается на несуществующее свойство в exports, и все. Вам необходимо явно присвоить свойству объекта exports, чтобы, когда файл находился в другом месте require d, вы могли использовать поиск свойства для объекта require d, чтобы получить нужное значение:

exports.myArray = myArray;

, а затем

const { myArray } = require('./items');

будет извлекать массив по желанию.

Вы также можете полностью исключить автономную переменную, что, вероятно, сделает вещи более понятными:

exports.myArray = [myClassItem1, myClassItem2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...