从同一个文件node.js访问另一个module.exports函数

时间:2013-05-19 22:02:34

标签: node.js module

让我更清楚自己想要实现的目标。

我运行的服务器包含许多模块,其中一个模块用于检查用户角色是否为管理员。

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应该触发并执行任何已执行的操作。

1 个答案:

答案 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 };
};

显然,请根据您的实际需要进行调整。有很多方法可以做同样类型的事情,但这与你原来的例子最接近。希望这会有所帮助。