2012-01-22 4 views
0

Можно ли сделать что-то подобное в Node.js/Express.js?Можно ли использовать нелокальные переменные в Node.js?

// use Object.create(null) so we don't have to worry about key collisons 
// see http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/ 
var theHash = Object.create(null); 

exports.store = function (req, res) { 
    key = getUniqueKey(); 
    theHash[key] = req.param('val'); 
    // finish the request, &c. 
} 

exports.retrieve = function (req, res) { 
    res.end(theHash[req.param('key')]); 
} 

В принципе, я строю недолгую службу коротких URL, и это, казалось, как легкий и быстрый способ сделать это. Элементы удаляются из хэша каждые 24 часа, поэтому он не может попасть в большой. Это безопасно, или мне нужно использовать какую-то базу данных?

+0

Безопасный как в чем? Что не было бы безопасно? – Layke

+0

@ Layke Я хочу, чтобы я не потерял сохраненные значения для определения области видимости или по другим причинам (кроме обычной очистки или сбоя сервера). Я знаю, что это безопасно в Javascript вообще, но я новичок в Node.js. Я также хотел бы получить некоторые комментарии о том, является ли это плохим дизайном. – mattwigway

+0

См. Мой рассказ ниже. – Layke

ответ

1

Если вам нужны советы (согласно комментариям), то да, это плохой дизайн, но не совсем неправильный.

Вы бы лучше использовали Redis для этого, в ячейке памяти => хранилище значений. Однако вы не ошибаетесь, но вы правильно заметили, что он чувствует себя «грязным», чтобы держать ваши ключи локально (по нескольким причинам, но, к сожалению, если узел умирает, вы теряете все).

+0

Не могли бы вы подробнее остановиться на нескольких причинах? Я угадываю, что нить одна, есть другие? – mattwigway

+0

@mattwigway резьба? Вам не нужно думать о потоковом использовании, если вы используете Node.js. Он работает только на одном потоке! Только другие внешние вещи, такие как доступ к файлам/сети, выполняются на других потоках. – Fox32

+0

Я так плохо сформулировал. Я предполагаю, что если приложение Node стало действительно популярным, нужно было бы масштабировать, используя несколько процессов (а не несколько потоков). – mattwigway

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