假设我有以下app.js(显然非常简化):
var express = require('express'),
app = express.createServer();
// include routes
require('./lib/routes')(app);
// some random function
var foo = function() {
return 'bar';
};
// another random function
var foo2 = function() {
return 'bar2';
};
然后我有路线模块:
module.exports = function(app){
app.get('/some/route', function(req, res){
var fooBar = foo(),
fooBar2 = foo2();
res.end(fooBar + fooBar2);
});
};
这显然不起作用,因为foo和foo2未在模块中定义。有没有办法让这项工作,或至少是一种不同的模式,以更好地实现这一目标?
答案 0 :(得分:6)
那么你可以将这两个函数放在一个对象中,并在routes.js初始化时传递它们。
var express = require('express'),
app = express.createServer();
// some random function
var foo = function() {
return 'bar';
};
// another random function
var foo2 = function() {
return 'bar2';
};
var fns = {foo : foo, foo2: foo2}
// include routes
require('./lib/routes')(app, fns);
路线中的:
module.exports = function(app, fns){
app.get('/some/route', function(req, res){
var fooBar = fns.foo(),
fooBar2 = fns.foo2();
res.end(fooBar + fooBar2);
});
};
这是我该怎么做的。您还可以将它们包含在app对象中。除了在init函数中传递它们之外,您还可以导出这两个函数并在routes.js中需要它们。
var express = require('express'),
app = express.createServer();
// some random function
var foo = function() {
return 'bar';
};
// another random function
var foo2 = function() {
return 'bar2';
};
module.exports = {foo : foo, foo2: foo2}
// include routes
require('./lib/routes')(app, fns);
路线中的:
module.exports = function(app){
var fns = require('../app.js');
app.get('/some/route', function(req, res){
var fooBar = fns.foo(),
fooBar2 = fns.foo2();
res.end(fooBar + fooBar2);
});
};
但我不喜欢它的想法,因为它产生循环依赖。对他们没有任何好感。