Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.07.2017, 22:42
Интересующийся
Отправить личное сообщение для davisaliw Посмотреть профиль Найти все сообщения от davisaliw
 
Регистрация: 03.07.2017
Сообщений: 12

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

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

Как такое можно реализовать?
Ответить с цитированием
  #2 (permalink)  
Старый 05.07.2017, 23:53
Интересующийся
Отправить личное сообщение для davisaliw Посмотреть профиль Найти все сообщения от davisaliw
 
Регистрация: 03.07.2017
Сообщений: 12

Сообщение от Rise Посмотреть сообщение
рукалицо
оч полезно, спасибо
максимально подробно объяснить хотел

я понимаю что нужно заново "инициализировать"(хрен знает как верно) переменные
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2017, 01:11
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

davisaliw,
Состояние и данные приложения обычно хранятся в базе данных. Если уж данных совсем мало, то можно и в обычные файлы записывать.
Если у вас сложные данные с зависимостями, то берите реляционную БД (mysql, oracle, postgresql and etc...), если совсем простые, то key-value хранилище.
Вы можете вообще "не хранить" переменную непосредственно в nodejs, а всегда ходить в БД, чтобы взять или изменить её значение.
Все зависит от решаемой задачи. Вы в своем вопросе не пишите какую именно задачу вы пытаетесь решить, поэтому дать вам правильное решение просто невозможно.
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2017, 10:43
Интересующийся
Отправить личное сообщение для davisaliw Посмотреть профиль Найти все сообщения от davisaliw
 
Регистрация: 03.07.2017
Сообщений: 12

Сообщение от EmperioAf Посмотреть сообщение
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;

Последний раз редактировалось davisaliw, 06.07.2017 в 10:46.
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2017, 11:44
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

А check в вашем коде это синглтон?
Ну пишите тогда внутри функции которая его использует так:
check.cn_el = z
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2017, 11:49
Интересующийся
Отправить личное сообщение для davisaliw Посмотреть профиль Найти все сообщения от davisaliw
 
Регистрация: 03.07.2017
Сообщений: 12

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

нужно что то глобальное на все код, мб взять всё в функцию
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2017, 11:52
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Пример вашего кода пожалуйста напишите, из ваших постов вообще не понятно что вы имеете ввиду.
Ответить с цитированием
  #8 (permalink)  
Старый 06.07.2017, 12:47
Интересующийся
Отправить личное сообщение для davisaliw Посмотреть профиль Найти все сообщения от davisaliw
 
Регистрация: 03.07.2017
Сообщений: 12

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

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

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

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

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

Я взял check.cn_el как пример. Там много переменных, с которыми происходит тоже самое
Ответить с цитированием
  #9 (permalink)  
Старый 06.07.2017, 13:26
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

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'}
Ответить с цитированием
  #10 (permalink)  
Старый 06.07.2017, 15:05
Интересующийся
Отправить личное сообщение для davisaliw Посмотреть профиль Найти все сообщения от davisaliw
 
Регистрация: 03.07.2017
Сообщений: 12

Сообщение от EmperioAf Посмотреть сообщение
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'}

Ладно, у меня получилось сделать:
script.js - главный:

var http = require('http'),
util = require('util'),
url = require('url'),
hash = require('./hash');

var server = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});

var Y = {
	alpha: null,
	beta: null,
	gamma: null
}
hash.test(Y);

});

server.listen(8080);


hash.js - второй.

var t4q ={
	    'H5I': 0,
		'N40': "",
},
		cf = {
	doe_cnt: t4q.H5I,
	doact: t4q.N40,
	chknull: function (q) {
            return (null == q) ? -1 : q;
        },
        getFloatVal: function (Y) {
                if (cf.chknull(Y) != -1 && !isNaN(Y)) {
                    var b = parseFloat(Y);
                    if (!isNaN(b)) return b.toFixed(2);
                }
            return -1;
        },
        cdoa: function (Y) {
                if (Y) {
                    var v = cf.getFloatVal(Y.alpha),
                        h = cf.getFloatVal(Y.beta),
                        W = cf.getFloatVal(Y.gamma),
                        F = cf.doe_cnt + "," + v + "," + h + "," + W + ";";
                    cf.doact = cf.doact + F,
					cf.doe_cnt++;
					console.log(cf.doact);
                }
        }
	};
		
function test(testobj){
	cf.cdoa(testobj);
};

module.exports.test = test;


делаем несколько гет запросов:


Что должно быть:


Повторяю, в скрипте очень много переменных и с каждой работать не вариант.

Последний раз редактировалось davisaliw, 06.07.2017 в 15:09.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Input type="time" + JS +Safari (iPhone) dpts Opera, Safari и др. 0 21.09.2016 07:24
узнать значения всех переменных после загрузки friend Events/DOM/Window 3 30.12.2015 18:36
Множественные значения в input - ЗА ВОЗНАГРАЖДЕНИЕ! Pb160 Events/DOM/Window 0 03.08.2015 12:29
Как и где задать цикл? Blondinka Events/DOM/Window 2 10.06.2014 15:29
return значения сразу двух переменных ilmel Общие вопросы Javascript 2 17.08.2013 15:12