访问导出模块nodeJS中的函数

时间:2018-10-12 09:51:49

标签: javascript node.js function class

即使我使用面向对象的语言(C ++,C#,AS3)编程,JS的形式基本用法仍然存在一些问题。

我需要做的是使模块中的一个功能可访问。在nodeJS中导出。

我有这个auth.js文件,里面有一个函数:

module.exports = function(app,passport,pg,user,razza){

    var Pg = pg;
    var User = user;
    var Razze = razza;

    updatePgXP: function (){
            console.log("!!!!!!!!!!!!!Add XP!!!!!!!!!!!!!");
    }

//....and the story goes on...
}

我想像这样在我的server.js中调用updatePgXP()

var authRoute = require('./app/routes/auth.js')(app,passport,models.pg,models.user,models.razze);

//doing stuff, and at some point...

io.sockets.on('connection', function(socket){
   socket.on('send message', function(data){
      authRoute.updatePgXP();
   }
}

一切正常,我只是想不出如何从外部访问auth.js内部的函数。它需要留在导出模块内部,因为它将需要在module.export之后在顶部声明的变量进行操作。

此刻,当我调用函数updatePgXP()时会引发未定义的错误。

非常感谢任何人都可以提供帮助。

1 个答案:

答案 0 :(得分:0)

您必须导出对象而不是会暴露这些功能的功能。

您还可以使用适当的构造函数创建一个类,该类将允许您以面向对象的方式对这些变量进行操作:

module.exports = function MyClass(app,passport,pg,user,razza){
    this.pg = pg;
    this.user = user;
    this.razza = razza;
}

MyClass.prototype.updatePgXP = function (){
   // Note "this" here:
   console.log(this.pg);
   console.log("!!!!!!!!!!!!!Add XP!!!!!!!!!!!!!");
}

// This is how you instantiate it somewhere else:
const myClassInstance = new MyClass(app,passport,pg,user,razza);
myClassInstance.updatePgXP();

如果您使用的是ES6,则可以使用适当的类构造:

module.exports = class MyClass {
  constructor(app,passport,pg,user,razza){
    this.pg = pg;
    this.user = user;
    this.razza = razza;
  }

  updatePgXP() {
    // Note what's inside "this" here:
    console.log(this.pg);
    console.log("!!!!!!!!!!!!!Add XP!!!!!!!!!!!!!");
  }
}

// Instantiation is the same:
const myClassInstance = new MyClass(app,passport,pg,user,razza);
myClassInstance.updatePgXP();

有关JS类的更多信息: