6

knox を使用して S3 バケットにファイルをアップロードする node.js アプリを構築しています。期待どおりに S3 とやり取りできますが、構成値を使用してクライアントを動的に構築できるように、構成を受け取るようにコントローラーを作成したいと考えています。

私の質問は、不注意にならずに構成パラメーターをコールスタックからコントローラーに取得するにはどうすればよいですか?

免責事項: 私は 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
}
...
4

3 に答える 3

8

このようなことをしてみてください...

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

}

追伸 今は試すことができませんが、このような問題を解決しました。

于 2013-01-28T22:41:56.223 に答える
1

構成をパラメーターとしてコントローラーに渡すことができます

コントローラ

// 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 リポジトリをチェックアウトできます。

于 2013-01-30T02:38:11.490 に答える