2013-06-25 248 views
3

這裏是我的基本的Node.js應用程序只有兩個文件:爲什麼我的module.exports不起作用?

app.js

var express = require('express') 
    , routes = require('./routes') 
    , http = require('http') 
    , path = require('path'); 
var app = express(); 

module.exports = { 
    test: "test" 
}; 


// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
    // defining middlewares 

app.get('/', routes.index); 




http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

和我index.js:

var server = require('../app'); 
exports.index = function(req, res){ 
    console.log(server); 
    res.send('Hello world'); 
}; 

我的問題是,當我去http:\\localhost:3000 ,我在控制檯{}而不是{test: "test"}中看到,它看起來像module.eports無法正常工作。爲什麼?

+0

是U肯定應該是../app –

+0

是的,我認爲,這是因爲index.js夾中「路線」 – hamou92

+4

請參閱[此頁]( http://www.selfcontained.us/2012/05/08/node-js-circular-dependencies/)關於循環依賴 – robertklep

回答

4

要求index.jsapp.js內,然後要求app.jsindex.js內,看起來像代碼味道給我。此外,如果您使用var app = module.exports = express()那麼快能夠把你的應用中間件(所以例如,你可以有一個requires第一個應用程序的第二應用程序,並通過一些要求吧。

當我需要訪問app內另一個所需的文件我做到以下幾點:?

// ./routes/index.js 
module.exports = function(app){ 
    var routes = {}; 
    routes.index = function(req, res){ 
    console.log(app.myConfig); 
    res.send('Hello world'); 
    }; 
    return routes; 
}; 

// ./app.js 
var app = module.exports = express(); 
app.myConfig = {foo:'bar'}; 
var routes = require('./routes/index.js')(app); 
+0

非常感謝,那很有幫助 – hamou92

+1

很樂意幫忙!歡迎來到節點! – Plato

0

你並不需要在index.js應用

indes.js應該只是

exports.index = function(req, res){ 
    console.log(server); 
    res.send('Hello world'); 
}; 

而且我假設index.js是在文件夾路徑,像這樣

app.js 
routes 
    index.js 
+0

如果我d不包括應用程序,那麼服務器沒有定義 – hamou92

+0

那麼你可以把它移動到'server.js'然後'require('../ server')'。但是你想用它做什麼?如前所述,否則將是一個循環參考,這不是做事情的最佳方式。 – JasonM