express.js и переменные

Есть например базовый скелет express.js
var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// для примера пусть будет переменная, но может быть и функция. Пример сильно упрощённый.
var a = 1;

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

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

внутренности routes/index.js
exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

Вопрос, как мне var a = 1; прокинуть внутрь routes.index? Без создание a глобальной и без написание всего кода в app.js.

Гугл не особо помог, примеры у самих visionmedia показывают что они делают app глобальным 11 строка github.com/visionmedia/screenshot-app/blob/master/app.js
потом заводят app.db в конкретном примере и дальше его используют по роутам, 7 строка github.com/visionmedia/screenshot-app/blob/master/routes/palette.js
Интересуют другие способы, если они есть конечно.
С шаблонами всё прекрасно, там есть app.locals
  • Вопрос задан
  • 5901 просмотр
Решения вопроса 1
dizballanze
@dizballanze
Software developer at Yandex
Например, так:
app.use(function(req, res, next) {
  req.app = app;
  next();
});


Соответственно в роуте можно обращаться req.app.locals.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
inook
@inook
JavaScript-Developer
Правильно использовать так:
app.set('foo', 'bar');
app.use(function (req, res, next) {
  res.locals.foo = 'BAR'
});
app.get('/', function (req, res, next) {
  console.log(req.app.get('foo')); // bar
  console.log(res.app.get('foo')); // bar
  // res.locals передаются во view engine вместе c app.locals
  console.log(res.locals.foo); // BAR
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы