Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从同一文件node.js访问另一个module.exports函数_Node.js_Module - Fatal编程技术网

从同一文件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