Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Сохраняются значения переменных (https://javascript.ru/forum/node-js-io-js/69604-sokhranyayutsya-znacheniya-peremennykh.html)

davisaliw 05.07.2017 22:42

Сохраняются значения переменных
 
Добрый день
Подскажите пожалуйста как можно исправить такое:
1. запускается сервер на node js, делаются пост запросы, выполняется скрипт
2. до выполнения переменная не объявлена, после выполнения скрипта она становится равна допустим: "3,21215;"
3. при следующем запрос переменная будет равна уже: "3,21215; 4,26215;"
Просто прибавляются значения
Объявлять переменные не вариант = их очень много, и очень долго выбирать нужные.

Тоесть нужно чтобы "перезапускался" сервер при каждом запросе, у каждого исполнения скрипта - его значения, без сохранения других предыдущих.

Как такое можно реализовать?

Rise 05.07.2017 23:49

Цитата:

Сообщение от davisaliw
"перезапускался" сервер при каждом запросе

рукалицо

davisaliw 05.07.2017 23:53

Цитата:

Сообщение от Rise (Сообщение 457684)
рукалицо

оч полезно, спасибо
максимально подробно объяснить хотел

я понимаю что нужно заново "инициализировать"(хрен знает как верно) переменные

EmperioAf 06.07.2017 01:11

davisaliw,
Состояние и данные приложения обычно хранятся в базе данных. Если уж данных совсем мало, то можно и в обычные файлы записывать.
Если у вас сложные данные с зависимостями, то берите реляционную БД (mysql, oracle, postgresql and etc...), если совсем простые, то key-value хранилище.
Вы можете вообще "не хранить" переменную непосредственно в nodejs, а всегда ходить в БД, чтобы взять или изменить её значение.
Все зависит от решаемой задачи. Вы в своем вопросе не пишите какую именно задачу вы пытаетесь решить, поэтому дать вам правильное решение просто невозможно.

davisaliw 06.07.2017 10:43

Цитата:

Сообщение от EmperioAf (Сообщение 457688)
davisaliw,
Состояние и данные приложения обычно хранятся в базе данных. Если уж данных совсем мало, то можно и в обычные файлы записывать.
Если у вас сложные данные с зависимостями, то берите реляционную БД (mysql, oracle, postgresql and etc...), если совсем простые, то key-value хранилище.
Вы можете вообще "не хранить" переменную непосредственно в nodejs, а всегда ходить в БД, чтобы взять или изменить её значение.
Все зависит от решаемой задачи. Вы в своем вопросе не пишите какую именно задачу вы пытаетесь решить, поэтому дать вам правильное решение просто невозможно.

нет нет, у меня не используются базы данных и не надо

Я так понимаю проблема в том, что переменная не объявлена "var ..."
А просто используется, без объявления

Поэтому, если несколько раз использовать скрипт, то она сохраняет все значения которые получила:
После первого выполнения скрипта: "3,14124;"
После второго "3,14124;4,56123;"
После третьего: "3,14124;4,56123;5,151173"
и т.д.

После перезапуска сервера и первого выполнения: "3,14133;"
....
и т.д.

И таких переменных более 50 штук.

Каждый запрос выполняется отдельно(новые пост запросы);

Cуть скрипта в вычислении финальной строки, а из за того что сохраняются значения переменных - она уже неверная после первого выполнения.

Мне нужно чтобы каждое выполнения скрипта было как новое, без влияния на него предыдущих.

Вот так, например, "объявляется" и переменной присваивается значение ( без var ):
check.cn_el = check.cn_el + z;

EmperioAf 06.07.2017 11:44

А check в вашем коде это синглтон?
Ну пишите тогда внутри функции которая его использует так:
check.cn_el = z

davisaliw 06.07.2017 11:49

Цитата:

Сообщение от EmperioAf (Сообщение 457718)
А check в вашем коде это синглтон?
Ну пишите тогда внутри функции которая его использует так:
check.cn_el = z

нет, там цикл у некоторых переменных

нужно что то глобальное на все код, мб взять всё в функцию

EmperioAf 06.07.2017 11:52

Пример вашего кода пожалуйста напишите, из ваших постов вообще не понятно что вы имеете ввиду.

davisaliw 06.07.2017 12:47

Цитата:

Сообщение от EmperioAf (Сообщение 457722)
Пример вашего кода пожалуйста напишите, из ваших постов вообще не понятно что вы имеете ввиду.

я бы с радостью, но не получается воспроизвести похожий код;

я ошибся, сказав что она не объявлена - объявлена, но все равно какой то баг;

Получается так:

К каждому новому запросу, в check.cn_el прибавляется новое значение, но старое при этом не затирается - а нужно только новое(новые если цикл).

Старое значение убирается только перезапуском сервера.

Я взял check.cn_el как пример. Там много переменных, с которыми происходит тоже самое

EmperioAf 06.07.2017 13:26

var check = {
    cn_el: ''
};
function hardWork(n /* string */) {
    check.cn_el = '';
    for (var el of n) {
        check.cn_el += el;
    }
    return check.cn_el
}

console.log(hardWork('234')); // '234'
console.log(check) // {cn_el: '234'}
console.log(hardWork('345')); // '345'
console.log(check) // {cn_el: '345'}
console.log(hardWork('456')); // '456'
console.log(check) // {cn_el: '456'}


Часовой пояс GMT +3, время: 22:42.