将configuration传递给控制器

我正在构build一个node.js应用程序,它将使用knox将file upload到我的S3存储桶。 我能够按预期与S3进行交互,但是我希望使控制器能够接收configuration,这样我就可以dynamic地构build带有configuration值的客户端。

我的问题是如何获得configuration参数调用堆栈到我的控制器而不是疏忽?

免责声明:我对Node.js比较陌生,所以可能只是我对输出差异缺乏了解。 和module.exports。*

以下是交互如何处理我的代码的示例:

app.js

... config = require('./config/config')['env']; require('./config/router')(app, config); ... 

router.js

 module.exports = function(app, config) { ... var controller = require('../app/controllers/home'); //Is there a way for me to pass config here? app.post('/upload', controller.upload); //Or here? ... } 

home.js

 var knox = require('knox'); var client = knox.createClient({ ... }); //I want to use config.key, config.secret, etc instead of hard-coded values ... exports.upload = function(req, res) { //Use client } ... 

尝试做这样的事情…

 var config = require('./config/config')['env']; // The use function will be called before your // action, because it is registered first. app.use(function (req, res, next) { // Assign the config to the req object req.config = config; // Call the next function in the pipeline (your controller actions). return next(); }); // After app.use you register your controller action app.post('/upload', controller.upload); 

然后在你的控制器动作

 exports.upload = function(req, res) { //Your config should be here... console.log(req.config); } 

PS。 我现在不能尝试,但我解决了类似的问题。

您可以将configuration作为parameter passing给您的控制器

调节器

 // controller.js file module.exports = function(req, res, config) { console.log('config parameter passed to controller', config); res.end('config passed') } 

应用

 // index.js file with the express app var controller = require('./controller'); var config = { key1: 'foo' }; var express = require('express'); var app = express(); var port = 3000; app.get('/', function(req, res){ controller(req, res, config); }); app.listen(port); console.log('app listening on port', 3000); 

演示

你可以看看一个完整的例子github回购

如果你想从一个单一的路线调用多个function的替代方法,这将做到这一点。

路线

 var users = require('../controllers/users'); app.route('/login').post(function(req, res){ if(users.authenticate()){ console.log('valid user'); if(users.createUser()) { console.log('user created'); } } }); 

调节器

 exports.authenticate = function(req, res, next) { return true; }; exports.createUser = function(req, res, next) { return true; };