2015-10-08 1 views
1

Я использую Meteor и создал несколько классов на сервере. Как я могу сделать их доступными, когда я хочу объявить их в других файлах на сервере?Meteor: как экспортировать класс и использовать его в другом файле на сервере

Например, я буду разделять каждую функцию класса в свой собственный файл, поскольку каждый из них будет большим. Как я могу инициализировать и использовать класс, когда мне это нужно? .

Импорт файла может быть сделано как этого

var User = require('./userclass.js'); 
var user = new User(); 

сервера/Lib/classfile.js

class User { 

    constructor(params) { 

     this._firstName = params.firstName; 
     this._lastName = params.lastName; 
     this._email = params.email; 
    } 
} 

сервер/file.js

var myVar = new User(someParams) 
// this is undefined 
+0

Is ваш файл класса фактически называет «classfile.js» или «userclass.js»? Вы можете просто загрузить порядок файлов, а не доступность .... – Soren

+0

, что является просто примером этого в узле, однако я не знаком с тем, как это сделать в meteor – meteorBuzz

ответ

3

Вы не можете определить зависимости в Метеор, использующий require - Метеор, как ожидается, должен понять это, но это я далеки от совершенства, и для кода начальной загрузки вам нужно будет обратить внимание на порядок загрузки файлов (в документации Meteor есть section on load order, вы должны прочитать это, но вкратце загрузите файлы в lib, и все файлы загружаются в в алфавитном порядке.

Это, как говорится, с функцией class, являющейся новой в ES2015, она выглядит как ошибка, что классы не экспортируются Метеор должным образом, но вы можете сделать обходной путь для этого.

следующие работы для меня, используя Метеор версии 1.2.0.2 ...

Lib/user.js

class xUser { 
    constructor(params) { 
     console.log(params) 
    } 
    toString(){return "Hi";} 
} 
User = xUser // this is avaiable in global space 

сервер/bootstrapcode.js

var myVar = new User("Hello") 
console.log(myVar.toString()); 
+0

К сожалению, я должен был быть более ясным , Я хотел бы инициализировать класс только тогда, когда это необходимо, и не иметь его в глобальном масштабе. – meteorBuzz

+0

Вы всегда можете создать свой собственный объект области видимости (например, что нужно для реализации node.js 'require), а также просто экспортировать и импортировать модули по мере необходимости - однако это не стандартная функциональность Meteor. – Soren

+0

модуль не определен, если я пытаюсь его экспортировать. module.exports = Пользователь; – meteorBuzz