Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass configuration to controller

I am building a node.js app that will upload files to my S3 bucket using knox. I am able to interact with S3 as expected, but I would like to make my controller to receive configuration so I can dynamically construct my client with configuration values.

My questions is how do I get configuration paramters down the call stack to my controller without being careless?

Disclaimer: I am rather new to Node.js so it could be simply my lack of knowledge in the difference between exports. and module.exports.*

Here is an example of how the interaction works with my code:

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
}
...
like image 998
Benny Avatar asked Jan 28 '13 22:01

Benny


People also ask

How do you inject service to a controller?

The first way of doing this is to inject a service into a controller. With an ASP. NET Core MVC application, we can use a parameter in the controller's constructor. We can add the service type and it will automatically resolve it to the instance from the DI Container.

What is Configurationbuilder in .NET Core?

Used to build key/value-based configuration settings for use in an application.


1 Answers

Try doing something like this...

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); 

And then in your controller action...

exports.upload = function(req, res) {

  //Your config should be here...
  console.log(req.config);

}

Ps. I can not try it right now, but I solved a similar issue like this.

like image 160
Split Your Infinity Avatar answered Sep 22 '22 00:09

Split Your Infinity