2013-09-24 97 views
1

我的應用程序文件夾結構是這樣的。Express JS無法識別環境

應用程序/ 配置/ app.js env.js server.js

每當我開始我跑我app.js文件,它給我的服務器開始在不確定的。 這是代碼的要點。

Gist Codes

server.js  
// Module dependencies. 
var http = require('http'), 
    app = require('./config/app')(); 

// Start server 
app.listen(app.get('port'), function(){ 
    console.log('App is Up at '+ app.get('port') + ' as ' + process.env.NODE_ENV); 
}); 

config/app.js 
var express = require('express'), 
    path = require('path'), 
    ejs = require('ejs'); 

module.exports = function() { 
    var app = express(); 
    var publicDir = path.join(__dirname, '../public'); 

    // Store all environment variables 
    app.set('port', process.env.PORT || 3000); 

    // Basic configuration 
    app.configure(function() { 
     app.use(express.logger('dev')); 
     app.use(express.bodyParser()); 
     app.use(express.methodOverride()); 
     app.use(app.router); 
     app.use(express.static(publicDir)); 
    }); 

    // Environment specific configuration 
    require('./env')(app); 

    return app; 
}; 
config/env.js 
var express = require('express'), 
    hbsPrecompiler = require('handlebars-precompiler'), 
    path = require('path'); 

module.exports = function(app) { 
    // development compile Handlebars and show errors 
    app.configure('development', function(){ 
     app.set('db-uri', process.env.MONGOLAB_URI || 'mongodb://localhost/App'); 

     hbsPrecompiler.watchDir(
      path.join(__dirname, "../public/templates"), 
      path.join(__dirname, "../public/templates/compiled/templates.js"), 
      ['handlebars', 'hbs'] 
     ); 
     app.use(express.errorHandler()); 
    }); 

    app.configure('production', function(){ 
     app.set('db-uri', process.env.MONGOLAB_URI); 
    }); 
}; 

節點server.js

輸出

/usr/bin/node app.js 
App is Up at 3000 as undefined 
+0

可以請您輸入顯示啓動服務器時的確切輸出。 – Kamrul

+0

@Kamrul在最後添加。 –

回答

2

默認情況下,process.env.NODE_ENV未定義。如果您在測試環境中運行節點,例如(NODE_ENV=test node app.js),則不會出現該問題。

,我建議你在module.exports功能加入這一行:

if (app.settings.env === 'development') process.env.NODE_ENV = 'development'; 
+0

它正在工作,但有一個問題,如果我將它放在config/app.js module.exports中,是否會獲取config/env.development中指定的所有開發需求? –

+0

是的。如果你在你的config/env.js module.exports函數的開頭添加那行,那麼你的應用將按照你的'app.configure('development'...'block)的指定進行配置。 –

+0

這似乎解決了 –

0

這看起來比你所提到的文件夾結構不同:

app = require('./config/app')(); 

它似乎相反。

+0

第一個app.js是根文件。 lemme將其改爲server.js –

0

這是符合市場預期。默認情況下沒有NODE_ENV環境變量,除非您明確設置它,所以process.env.NODE_ENV未定義。這沒有問題。