2013-07-27 3 views
0

Я занимаюсь экспортом node.js и требую. Возьмите экспресс приложение по умолчанию, например:Общие сведения об экспорте/требовании NodeJS

В нижней части кода app.js, есть что-то, что выглядит следующим образом: app.get('/', routes.index); Это означает, что я могу иметь больше маршрутов, указанных, например:

app.get('/login', routes.login); 
app.get('/logout', routes.logout); 

и т. Д. Чтобы лучше понять экспорт/потребовать, я пытаюсь поместить их в отдельный файл. Я пробую это так:

//app.js 
var gets = require('./gets'), 
exports.foo = app; 

//gets.js 
var app = require('./app'); 
console.log(app); //returns empty obj {} 

Почему? Можете ли вы помочь мне понять, что я делаю неправильно? Спасибо заранее.

ответ

1

Это то, что называется circular dependency (узел документирует его как «цикл»), когда оба модуля требуют друг друга. Это почти всегда выбор дизайна, который вы можете и должны избегать. Узел должен сначала загрузить один модуль, поэтому второй заканчивает получение пустого объекта из-за этого случая круговой зависимости. Решение состоит в том, чтобы не делать gets.jsrequireapp.js, всего лишь app.jsrequiregets.js.

//app.js 
var app = require('express')(); 
var gets = require('./gets'); 
gets.setup(app); 

затем

//gets.js 
function setup (app) { 
    app.get('/blah', myHandler); 
} 
exports.setup = setup;