Как получить доступ к переменным, объявленным в основном app.js в отдельных файлах маршрута в node.js Express 2.5.5? - PullRequest
12 голосов
/ 19 января 2012

Я только начал использовать новую версию Express (2.5.5), которая по умолчанию создает каталог ./routes вместе с ./views и ./public

Внутри маршрутов есть файл index.js, который содержит:

/*
 * GET home page.
 */

exports.index = function(req, res){
  res.render('index', { title: 'Express' })
};

по умолчанию (после запуска express из командной строки), и это раздел маршрутов в главном app.js:

// Routes

app.get('/', routes.index);

Я установил переменную для клиента Redis в главном app.js:

var redis = require('redis'),
    db = redis.createClient();

и мне было интересно, как я могу получить доступ к методам db (и любым другим модулям, которые я require в app.js) в файлах, содержащихся в ./routes

Ответы [ 3 ]

21 голосов
/ 20 января 2012

Мне очень понравилось решение Jamund, но я бы расширил концепцию до этого:

// db.js
var redis = require('redis');
module.exports = redis.createClient();

// index.js
var db = require(.'/db')

// whatever other file
var db = require(.'/db')
// do something with db
db.disconnect();

и дБ на индексе, и на другом файле получат один и тот же экземпляр клиента redis

5 голосов
/ 19 января 2012

Просто назовите это наверху ваших файлов.Requires находятся в общем пространстве, поэтому вы можете повторно запрашивать файл несколько раз, и он всегда будет ссылаться на одну и ту же версию.Если вы хотите проявить фантазию, вы можете создать свой собственный модуль БД, который делает что-то подобное, чтобы предотвратить двойное создание клиентов:

3 голосов
/ 19 января 2012

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

fe

// app.js

var app = express.createServer()
  , db = require('redis').createClient();

require('./routes').with(app, db);

// routes.js
module.exports.with = function(app, db) {
  app.get('/',function(r,s) { s.end('Sweet');});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...