2012-06-25 4 views
3

Я пишу приложение узла, которое должно запоминать данные через итерации соединения обратного вызова createServer(). Есть ли простой способ, который не включает базы данных или файл r/w? Я попытался создать объекты в соответствующих модулях и даже в главном скрипте, передавая их в различные обработчики ответов, однако для каждого соединения они очищаются.Постоянные переменные в nodeJS

Что я имею в виду, что:

require('http').createServer(function(req,res){ 
     route(req,res,object); 
}).listen(cp=80); 

object={variable:0} 

function route(req,res,object){ 
    res.end(); 
    console.log(object.variable); 
    object.variable=Math.floor(Math.random()*100); 
} 

console.log неудивительно бросает 0 каждое соединение в данном случае. Есть ли способ создать глобальные переменные, а не в смысле доступности через модули, но стойкие в отличие от var?

ответ

4

Каждый модуль в узле имеет свой собственный объем, поэтому нет, var Foo; не создает глобальную переменную Foo. Используйте объект global изнутри модулей.

UPDATE:

require('http').createServer(function(req,res){ 
     route(req,res,object); 
}).listen(cp=8080); 

object={variable:0} 
global.foo = 'Bar'; // I added this 

function route(req,res,object){ 
    res.end(); 
    console.log(object.variable); 
    console.log("foo = %s", global.foo); // I added this too 
    object.variable=Math.floor(Math.random()*100); 
} 

И он записывает "Foo = Bar", как и ожидалось, а также.

+0

Не работает для меня. – TERMtm

+1

Как вы протестировали? Я просто запустил ваш код в узле, и он работает так, как ожидалось. –

+0

Кроме того, см. Мое обновление –

Смежные вопросы