2013-06-20 2 views
0

Я создаю программу в Node.js. Я довольно новичок в программировании чего-либо, кроме небольших функций javascript для веб-сайтов, поэтому, пожалуйста, несите меня, если моя терминология/идеи полностью ошибочны.Создание сценария «контроллера» для Node.js

Первоначально у меня была вся программа в одном файле сценария (~ 500 строк). Несколько человек предложили мне разделить его на отдельные классы, где каждый класс имеет только одну «работу» для завершения. Мне нравится эта идея, так как она помогла мне действительно упорядочить мой код и сделать его более модульным и управляемым.

Моя проблема: Как получить доступ к этим классам из центрального файла?

Например, притворяйтесь, что у меня есть 3 класса, в 3 отдельных файлах javascript, все из которых содержат 3 функции. Я хочу получать и передавать данные в/из них из одного центрального сценария «контроллер». Каков наилучший способ сделать это? Могу ли я просто указать require в переменную, а затем получить доступ к функциям скрипта?

var class1 = require('./class1.js'); 

class1.function1(); // call the first function contained in class1.js 

Возможно ли такое? Опять же, совершенно новое к этому.

+0

Просто 'require()' их, как и все остальное. Какая у вас проблема? – SLaks

+0

Вы можете посмотреть на запуск чего-то вроде backbone.js на своем сервере. Он структурирует ваш код в модели, маршрутизаторы и представления. –

+0

@SLaks, как указано выше, мне нужен сценарий, но как мне получить доступ к функциям внутри указанного скрипта? Пример кода выше порождает ошибку. EDIT: Как и в, 'class1.js' имеет функцию' function1' внутри нее. Как мне вызвать эту функцию из моего основного сценария? 'class1.function1();' не работает. – Jascination

ответ

1

NodeJS поддерживает CommonJS modules. Модуль CommonJS предоставляет три глобальные переменные: module, exports и require. Вы можете экспортировать свой API, добавив к объекту exports и require эти файлы, как и другие модули узлов (добавьте ./, чтобы указать, что это относительно текущего файла), назначьте его переменной и получите доступ к значениям, добавленным в эти файлы exports объект:

// first-module.js 

exports.hello = 'world'; 
exports.num = 23; 


// main.js 

var first = require('./first-module'); 

console.log(first.hello); 
console.log(first.num); 
+0

Ах! Это заставило его работать, спасибо за подробный ответ. – Jascination

+0

Быстрое уточнение: если 'export.hello' - это функция, которая вызывает' num' (другая функция), но 'main.js' только вызывает' hello() ', мне нужно добавить' num() 'в 'экспорт' также? Или я добавляю только те функции, которые я активно вызываю из 'main.js'? – Jascination

+0

Только функции, которые вы вызываете. Если вы не экспортируете их, они будут закрытыми, что означает, что вы не можете получить доступ извне своего модуля, но экспортированные функции внутри модуля все равно могут назвать это просто замечательным. – Daff

1

Вам необходимо добавить функции к объекту exports в class1.js.
require("./class1") вернет этот объект.