2014-09-02 92 views
10

我在配置文件中使用配置var在另一個配置文件中設置問題。例如。從其他配置文件訪問配置變量

// file - config/local.js 
module.exports = { 
    mongo_db : { 
    username : 'TheUsername', 
    password : 'ThePassword', 
    database : 'TheDatabase' 
    } 
} 

// file - config/connections.js 
module.exports.connections = { 
    mongo_db: { 
    adapter: 'sails-mongo', 
    host: 'localhost', 
    port: 27017, 
    user: sails.config.mongo_db.username, 
    password: sails.config.mongo_db.password, 
    database: sails.config.mongo_db.database 
    }, 
} 

當我揚帆電梯',我得到以下錯誤:

user: sails.config.mongo_db.username, 
    ^
ReferenceError: sails is not defined 

我可以訪問其他地方的配置變量 - 例如,這個工程:

// file - config/bootstrap.js 
module.exports.bootstrap = function(cb) { 
    console.log('Dumping config: ', sails.config); 
    cb(); 
} 

這將所有配置設置轉儲到控制檯 - 我甚至可以在那裏看到mongo_db的配置設置!

我這麼迷惑。

回答

15

在配置文件中不能訪問sails,因爲在處理這些文件時Sails config仍在加載!在bootstrap.js中,您可以訪問配置裏面的自舉函數,因爲該函數在加載Sails後調用,但不是以上的函數。

在任何情況下,配置/ local.js被合併在所有其他配置文件的頂部,這樣你就可以得到你想要的東西是這樣的:

// file - config/local.js 
module.exports = { 
    connections: { 
    mongo_db : { 
     username : 'TheUsername', 
     password : 'ThePassword', 
     database : 'TheDatabase' 
    } 
    } 
} 

// file - config/connections.js 
module.exports.connections = { 
    mongo_db: { 
    adapter: 'sails-mongo', 
    host: 'localhost', 
    port: 27017 
    }, 
} 

如果你真的需要訪問另一個配置文件,您始終可以使用require,但不建議。由於Sails基於多種因素(包括當前環境)將配置文件合併在一起,因此您可能會閱讀一些無效的選項。最好做的事情預想方式:特定環境設置使用配置/ ENV/*文件(例如配置/ ENV/production.js),配置/具體到一個單一的系統設置local.js(比如你的電腦)和其他文件共享設置。

+0

酷 - 這是有道理的。我想我正在被@mikermcneil對這個問題的評論拋出:http://stackoverflow.com/questions/18267706/(看到他最近的評論,他似乎確認你可以訪問其他配置文件中的配置變量) 謝謝 - 我會嘗試使用config/env和config/local的組合。 – onblur 2014-09-02 19:55:28

+0

是的,我不確定他是否真的想回答以前的評論! – sgress454 2014-09-02 20:05:47

+1

我見過的最糟糕的框架。如果你打算在config/http中做任何值得注意的事情,比如說訪問redis,就會導致需要複製代碼 – r3wt 2016-06-17 20:11:54