【发布时间】:2016-11-27 11:24:55
【问题描述】:
我已经玩了几天 NodeJS 和 Express,它非常酷。但是我遇到了一个我无法理解的问题,所以我希望那里的其他人可以帮助我解决这个问题。
我知道我可以声明一个模块,然后通过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,然后将它传递给所有使用它的路由器模块。有没有可能?
【问题讨论】: