sistema quickstart node harmony guide docs biblioteca app about node.js

node.js - quickstart - Requerir devuelve un objeto vacío



node js quickstart (1)

Esto se debe a que tiene una dependencia circular. Node.js maneja esto de una manera muy específica:

  1. El primer módulo carga y ejecuta (en este caso, book.js ). It ( book.js ) cargará y ejecutará el segundo módulo ( author.js ) cuando it ( book.js ) requiera el otro ( author.js )

  2. Cuando el segundo módulo ( author.js ) se carga y se ejecuta, él ( author.js ) requiere el primer módulo ( book.js ) pero éste ( author.js ) recibirá un objeto parcialmente lleno , sin author.js cuántas cosas se hayan establecido en el Exportaciones en book.js antes de requerir author.js estarán en ese objeto

  3. Después de book.js completamente, el objeto author.js obtenido de require(''./book'') será el objeto de módulo completo book.js

Para obtener más información, aquí están los documentos: http://nodejs.org/api/modules.html

Si es posible agregar dinámicamente ese esquema a uno de esos objetos ActiveRecord, esa es una forma de resolver esto. Esto es realmente una situación complicada. De hecho, incluso sin el sistema de módulos, esto causaría problemas para usted. Si pone todo este código en un solo archivo, ¿cómo lo haría funcionar?

Tengo una carpeta, que tiene index.js y un par de modelos (clases) index.js

module.exports = { Book : require(''./book''), Author : require(''./author'') }

book.js

var Author = require(''./author'') var Book = models.ActiveRecord.extend({ schema : { belongsTo : { author : Author } } }) module.exports = Book

author.js

var Book = require(''./book'') var Author = models.ActiveRecord.extend({ schema : { hasMany : { author : Book } } }) module.exports = Author

¡El problema es que la clase de autor no parece encontrar el libro! Es solo un Objeto vacío. Sin embargo, si cambio las exportaciones en index.js, poner Book después de Author - funciona, pero luego el otro modelo deja de funcionar.

No quiero hacer ningún truco para que funcione.