我一直在玩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
沒有返回對象),但是我怎麼構造我的代碼,以便我可以將參數傳遞給模塊,最終將導出一個路由器中間件?我想在一個地方要求並初始化Foo
,然後將它傳遞給所有使用它的路由器模塊。以某種方式可能嗎?
它工作。非常感謝^ ^ – Gikkman