假设我有以下的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在模块内部没有定义。有没有什么方法可以让这个工作,或者至少有不同的模式可以更好地完成这个任务?
module.exports
是一个被调用的函数,但实际上它是一个包含函数的对象。此外,问题和答案都在定义的闭合括号后面加了一个")"。例如:module.exports = function(app){..})
- 首先,这样永远不会执行。其次,应该像这样写:module.exports.myfunc = function(args) {...}
或者module.exports = { myfunc1 : function(){...}, myfunc2: function(){...} }
。好吧,这是一个老问题,但为了新手的缘故,需要澄清一下。 - unsynchronizedmodule.exports
可以设置为一个函数。它被非正式地称为 substack 模式。看一下。 - Farid Nouri Neshatfunction main() {...};main.minorThing = function () {...}; module.exports = main
)。这是一种非常常见的模式。Node.js assert 模块也像我上面描述的那样导出了一个主函数。查看 npm 注册表的第一页,在顶部模块中,request、express、socket.io 和 mkdirp 都使用了这种模式。 - Farid Nouri Neshat