Jam*_*son 3 javascript design-patterns module node.js
假设我有以下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';
};
Run Code Online (Sandbox Code Playgroud)
然后我有路由模块:
module.exports = function(app){
app.get('/some/route', function(req, res){
var fooBar = foo(),
fooBar2 = foo2();
res.end(fooBar + fooBar2);
});
};
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,因为foo和foo2没有在模块中定义.有没有办法让这个工作,或至少一个不同的模式,以更好地完成这个?
那么你可以把这两个函数放在一个对象中,并在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);
Run Code Online (Sandbox Code Playgroud)
在路线:
module.exports = function(app, fns){
app.get('/some/route', function(req, res){
var fooBar = fns.foo(),
fooBar2 = fns.foo2();
res.end(fooBar + fooBar2);
});
};
Run Code Online (Sandbox Code Playgroud)
这是我怎么做的.您还可以将它们包含在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);
Run Code Online (Sandbox Code Playgroud)
在路线:
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);
});
};
Run Code Online (Sandbox Code Playgroud)
但我不喜欢它的想法,因为它产生循环依赖.对他们没有任何好感.
归档时间: |
|
查看次数: |
13931 次 |
最近记录: |