将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; };