У меня была похожая проблема, но потом я вспомнил, что это все «просто javascript», и смог запутать ответ.
Если вы хотите, чтобы ваши маршруты были определены в нескольких файлах (вместо того, чтобы запихивать их все в один файл route/index.js), вы можете просто создать объект маршрутов хакерским способом (следующим образом):
var express = require('express')
, routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
}
, hbs = require('hbs');
ПРИМЕЧАНИЕ. Вам не нужны определения express и hbs (первая и последняя строки), я просто поместил их туда, чтобы дать вам небольшой контекст. Этот фрагмент кода взят непосредственно из верхней части моего файла app.js.
Обратите внимание на .index
и .events
, связанные с вызовами функций require()
. Это ключ. Мой файл events.js имеет только один экспорт (события):
exports.events = function(req, res){
console.log('in events');
res.render('events', { events: events, title: "EVENTS" });
console.log('events done');
};
Поскольку функция require()
, по сути, захватывает файл и требует (импортирует) любые неприватные переменные (то есть те, которые прикреплены к специальному объекту exports
) и предоставляет их файлу, содержащему вызов require()
, я могу просто захватить конкретный функция, которую я требую из файла, который я включаю с вызовом require()
. Если бы у меня было несколько экспортов, определенных в требуемом файле, я думаю, что мог бы получить их так (не проверял):
routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
, favorites: require('./routes/events.js').favorites
, upcoming: require('./routes/events.js').upcoming
}
Я подозреваю, что это вызовет у кого-то с кучей nodeJS или MVC аневризму, если они прочитают ваш код (держу пари, что он будет включать один и тот же файл 3 раза, но я не совсем уверен). Может быть, лучше сделать:
routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
, favorites: require('./routes/favorites.js').favorites
, upcoming: require('./routes/upcoming.js').upcoming
}
В противном случае, почему бы просто не засунуть их все в индекс? Хотя не совсем уверен, я только второй день работаю с Node и любыми связанными с ним технологиями...
Также, вероятно, поможет вам, если вы выберете оператор console.log сразу после ваших объявлений var:
console.log(routes);
person
cmcculloh
schedule
10.04.2012