Ответ 1
Это потому, что у вас есть круговая зависимость. Node.js обрабатывает это очень определенным образом:
-
Первый модуль загружается и запускается (в данном случае
book.js
). Он (book.js
) будет загружать и запускать второй модуль (author.js
), когда он (book.js
) требует другого (author.js
) -
Когда второй модуль (
author.js
) загружается и запускается, ему (author.js
) требуется первый модуль (book.js
), но он (author.js
) получит частично заполненный объект, однако многие вещи были установлены на экспорт в book.js, прежде чем требуется, чтобы author.js был в этом объекте -
После завершения
book.js
объектauthor.js
, полученный изrequire('./book')
, будет полным объектом модуляbook.js
Для получения дополнительной информации, здесь docs: http://nodejs.org/api/modules.html
Если возможно динамически добавить эту схему к одному из этих объектов ActiveRecord, это один из способов решить эту проблему. На самом деле это довольно сложная ситуация. Фактически, даже без модульной системы это может вызвать проблемы для вас. Если вы поместите весь этот код в один файл, как вы его заработаете?