从同一文件node.js访问另一个module.exports函数
让我更清楚地了解我想要实现的目标 我有一个正在运行的服务器,其中包含许多模块,其中一个模块用于检查用户角色是否为管理员 在从同一文件node.js访问另一个module.exports函数,node.js,module,Node.js,Module,让我更清楚地了解我想要实现的目标 我有一个正在运行的服务器,其中包含许多模块,其中一个模块用于检查用户角色是否为管理员 在Server.js中 var loginAPI = require('myModule')(argStringType), express = require('express'); var app = express(); app.get( "/post/:postid", function( req, res ) { var id = r
Server.js中
var loginAPI = require('myModule')(argStringType),
express = require('express');
var app = express();
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 ) { };
};
现在在myModule.js
中,我已经实现了一些函数,只想再添加一个,但是这个函数实际上不需要从server.js
调用,而是在用户访问URL
时调用,所以我想在myModule.js
中添加类似的内容
var loginAPI = require('myModule')(argStringType),
express = require('express');
var app = express();
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 ) { };
};
在myModule.js中
var loginAPI = require('myModule')(argStringType),
express = require('express');
var app = express();
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 ) { };
};
从上面可以看到,我在
模块中有两个函数。exports
除了模块之外,它们工作得很好。exports
如果我不尝试调用getContent
,这个函数可以工作,但这正是我试图实现的。当有人以这种格式输入URL
访问站点时,app.get
应该被激活,并执行任何实现的操作。确保您意识到Node.js中的每个模块都有自己的作用域。所以
模块a:
var test = "Test output string";
require('ModuleB');
模块B:
console.log(test);
将只输出未定义的
话虽如此,我认为这是您正在寻找的模块样式:
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 };
};
显然,调整以适应您的实际需要。有很多方法可以做相同类型的事情,但这与您最初的示例最为吻合。希望这能有所帮助。确保您认识到Node.js中的每个模块都有自己的作用域。所以 模块a:
var test = "Test output string";
require('ModuleB');
模块B:
console.log(test);
将只输出未定义的
话虽如此,我认为这是您正在寻找的模块样式:
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 };
};
显然,调整以适应您的实际需要。有很多方法可以做相同类型的事情,但这与您最初的示例最为吻合。希望这能有所帮助。您不能也导出它吗?否则,我看不出问题的重点<代码>返回{exportName:exportName,[…]和require:
loginAPI.exportName(arg)
@fabriciomatté问题是我想要这个应用程序。让始终处于活动状态而不被调用,所以一旦他们执行要求的,它将立即被使用。我明白了。我仍然不完全确定你想要实现什么,但从你的代码来看,你似乎想给全局对象添加一个方法。@fabriciomatté我很抱歉我的问题让我很困惑,我知道,但这里是我试图实现的简要说明。我们有一个服务器,其中包括很多模块,我试图实现的一个模块有一些功能,所以我想在其中添加一个功能,但问题是这个功能不需要o始终处于活动状态,这意味着不需要仅在他们访问URL
时调用它,那么它将处于活动状态。当他们访问该网站时,他们还必须访问其他功能才能获得一些详细信息。我支持Fabricio所说的,如果你想使用exportName
,为什么不导出它?module.exports.exportName=function(arg){…};
然后使用loginAPI.exportName(arg);
调用它。如果这不是您要问的,您可能需要用扩展的描述和示例重新编写您的问题。您不能也导出它吗?我看不出问题的其他方面。返回{exportName:exportName,[…]
和require之后:loginAPI.exportName(arg)
@fabriciomatté问题是我想要这个应用程序。让始终处于活动状态而不被调用,所以一旦他们执行要求的,它将立即被使用。我明白了。我仍然不完全确定你想要实现什么,但从你的代码来看,你似乎想给全局对象添加一个方法。@fabriciomatté我很抱歉我的问题让我很困惑,我知道,但这里是我试图实现的简要说明。我们有一个服务器,其中包括很多模块,我试图实现的一个模块有一些功能,所以我想在其中添加一个功能,但问题是这个功能不需要o始终处于活动状态,这意味着不需要仅在他们访问URL
时调用它,那么它将处于活动状态。当他们访问该网站时,他们还必须访问其他功能才能获得一些详细信息。我支持Fabricio所说的,如果你想使用exportName
,为什么不导出它?module.exports.exportName=函数(arg){…};
然后使用loginAPI.exportName(arg)调用它;
。如果这不是你要问的问题,你可能需要用扩展的描述和示例来修改你的问题。从你的回答中可以看出这更有意义,我确实以你的方式更好地理解它,但我唯一关心的问题是,我不想修改我试图实现的整个模块。这是一个开源pr我正在参与的项目,所以他们只希望我在其中添加一些内容,而不是更改他们的代码。无论如何,如果不可能,我将尝试使用您的项目并实现它,或者询问他们是否同意我更改他们的代码。谢谢!如果这是一个开源项目,那么我肯定会提出您的问题直接联系维护人员/社区,看看他们希望如何处理。他们很可能已经有了一个适合您的范例。祝您好运。从您的回答中,它更有意义,我确实以您的方式更好地理解了它,但我唯一关心的问题是,我不想修改我正在使用的整个模块这是一个开源项目,我正在参与其中,所以他们只希望我在其中添加一些东西,而不是changi