@ChernovGV

Чем вызвана ошибка "Хххх is not a constructor"при подключении класса через require в Node.js?

Всем привет!
Столкнулся с проблемой, почему-то подключаемый через require класс записывается в константу как объект:
const LietnerBox = require('../entities/LietnerBox');

5f8931a725e13565562250.png
Как следствие получаю ошибку "LietnerBox is not a constructor" при попытке инстанцировать объект данного класса.
Обратите внимание, класс RepeatResult подключается также, но он определяется именно как класс и не вызывает проблем.

Если же подключать класс внутри метода, то проблема исчезает.
const RepeatResult = require("../dto/RepeatResult");
// const LietnerBox = require('../entities/LietnerBox'); //получаю ошибку "LietnerBox is not a constructor"

class CardMover {
...
    /**
     * @param repeatResult {RepeatResult}
     * @return {LietnerBox}
     */
    _getNextBox(repeatResult) {
        const LietnerBox = require('../entities/LietnerBox'); //код выполняется корректно
        return new LietnerBox(1);
    }
...
}

module.exports = CardMover;


5f892cb703363214178260.png

Подскажите, почему так и какие есть нюансы использования require в Node.js?

файл класса LietnerBox

class LietnerBox {

    /**
     * @param num {Number}
     */
    constructor(num) {
        this._num = num;
        ...
    }
    ...
}

module.exports = LietnerBox;

  • Вопрос задан
  • 508 просмотров
Решения вопроса 1
@ChernovGV Автор вопроса
Уважаемый Lynn «Кофеман», оказался прав!

Lynn «Кофеман»:
Вангую циклическую зависимость

Дело в том, что require в JS это не тоже самое что import в java, или use в php.
Получается в JS классы не могут импортироваться друг для друга.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
по мне все подключения должны быть в начале файла, использование рекваер в методе плохой код.
хочется по паттернам красиво разложить, посмотри в сторону композиции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы