私はNodeJSとExpressを数日間使ってきました。しかし私は私の周りに頭を上げることができない問題にぶつかったので、私はこれをクリアするのを助けることができる他の誰かが願っています。パラメータ付きExpressJS - ルータモジュール
モジュールを宣言してから、このモジュールにパラメータをrequire
メソッドで渡すことができます。
--- App.js ----
var foo = require('./modules/Foo.js');
foo.config();
var bar= {}
require('./modules/Bar.js)(bar, foo)
--- Bar.js ---
module.exports = function(Bar, Foo) {
Bar.act = function(){
Foo.do();
}
}
私は、これはそれを使用して必要となるすべてのモジュールでFoo
を必要とするよりもずっときれいなデザインだと思います。また、それを必要とする各モジュールで初期化を行う必要もありません。
しかし、その後はRouter
となり、実際の動作は分かりません。そこにほとんどの例外は、各モジュール内のルータを必要とし、このような何か:
--- App.js ----
var index = require('./views/index.js');
app.use('/', index);
--- Index.js ---
var express = require('express');
var router = express.Router();
var foo = require('../modules/Foo.js);
foo.config();
router.get('/', function (req, res) {
foo.do();
res.render('index');
})
module.exports = router
しかし、その後、私は手動でindex.js
で使用されるすべてのモジュールを必要とする必要があります。私が本当にやりたいだろうが、このようなものです:
--- App.js ----
var foo = require('../modules/Foo.js);
foo.config();
var index = require('./views/index.js')(foo);
app.use('/', index);
--- Index.js ---
var express = require('express');
var router = express.Router();
module.exports = function(foo){
router.get('/', function (req, res) {
foo.do();
res.render('index');
})
}
しかし、それをこのように書いて、コンパイラは私に語った「Router.use()ミドルウェアを必要とし、未定義のです」。私はこのエラーの原因を調べることができます(module.exports
はオブジェクトを返しません)。しかし、最終的にRouterミドルウェアをエクスポートするモジュールにパラメータを渡すことができるように私のコードをどのように構造化しますか? 1つの場所にFoo
を要求して初期化し、それを使用するすべてのルータモジュールに渡します。どういうわけか可能ですか?
それは働いた。ありがとうございました^。^ – Gikkman