Доступ к функции в модуле экспорта nodeJS - PullRequest
0 голосов
/ 12 октября 2018

Даже если я программирую на объектно-ориентированных языках (C ++, C #, AS3), у меня все еще есть некоторые проблемы с базовым использованием JS для его формы.

Мне нужно сделать доступной одну функцию внутриmodule.export в 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...
}

И я хотел бы вызвать 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.

В этот момент выдается неопределенная ошибка в функции updatePgXP() при ее вызове.

Большое спасибо всем, кто может помочь.

1 Ответ

0 голосов
/ 12 октября 2018

Вы должны экспортировать объект вместо функции, которая бы выставляла эти функции.

Вы также можете создать класс с соответствующим конструктором, который позволил бы вам работать с этими переменными в объектно-ориентированном стиле:

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:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...