首页 > 解决方案 > 访问导出模块 nodeJS 中的函数

问题描述

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

我需要的是在 nodeJS 的 module.export 中访问一个函数。

我有这个 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...
}

我想像这样调用updatePgXP()我的 server.js (东西):

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 之后声明在顶部的 var 才能运行。

此刻,updatePgXP()当我调用它时,会在函数上触发一​​个未定义的错误。

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

标签: javascriptnode.jsfunctionclass

解决方案


您必须导出对象而不是会公开这些函数的函数。

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

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 中的类:


推荐阅读