让我更清楚自己想要实现的目标。
我运行的服务器包含许多模块,其中一个模块用于检查用户角色是否为管理员。
Server.js
中的
var loginAPI = require('myModule')(argStringType),
express = require('express');
var app = express();
现在在myModule.js
我已经实现了很少的功能,只想添加一个,但是这个功能实际上不需要从server.js
调用它而是在此人访问URL
后致电,因此我想将此类内容添加到myModule.js
myModule.js
中的
app.get( "/post/:postid", function( req, res ) {
var id = req.param('postid');
return getContent( postid );
});
// Module.exports
module.exports = function ( arg ) {
return {
getContent: function ( id ) { },
getHeader: function ( id ) { };
};
从上面的内容可以看出,我有module.exports
中的两个函数,除了在module.exports
之外的那个函数之外,它们没有问题,如果我不在尝试调用getContent
,但这正是我想要实现的目标。当有人通过以该格式输入URL
来访问该网站时,app.get
应该触发并执行任何已执行的操作。
答案 0 :(得分:5)
确保您意识到Node.js中的每个模块都有自己的范围。所以
ModuleA:
var test = "Test output string";
require('ModuleB');
ModuleB:
console.log(test);
只输出undefined
。
话虽如此,我认为这是您正在寻找的模块风格:
server.js:
var app = //instantiate express in whatever way you'd like
var loginApi = require('loginModule.js')(app);
loginModule.js:
module.exports = function (app) {
//setup get handler
app.get( "/post/:postid", function( req, res ) {
var id = req.param('postid');
return getContent( postid );
});
//other methods which are indended to be called more than once
//any of these functions can be called from the get handler
function getContent ( id ) { ... }
function getHeader ( id ) { ... }
//return a closure which exposes certain methods publicly
//to allow them to be called from the loginApi variable
return { getContent: getContent, getHeader: getHeader };
};
显然,请根据您的实际需要进行调整。有很多方法可以做同样类型的事情,但这与你原来的例子最接近。希望这会有所帮助。