05.07.2017, 22:42
|
Интересующийся
|
|
Регистрация: 03.07.2017
Сообщений: 12
|
|
Сохраняются значения переменных
Добрый день
Подскажите пожалуйста как можно исправить такое:
1. запускается сервер на node js, делаются пост запросы, выполняется скрипт
2. до выполнения переменная не объявлена, после выполнения скрипта она становится равна допустим: "3,21215;"
3. при следующем запрос переменная будет равна уже: "3,21215; 4,26215;"
Просто прибавляются значения
Объявлять переменные не вариант = их очень много, и очень долго выбирать нужные.
Тоесть нужно чтобы "перезапускался" сервер при каждом запросе, у каждого исполнения скрипта - его значения, без сохранения других предыдущих.
Как такое можно реализовать?
|
|
05.07.2017, 23:53
|
Интересующийся
|
|
Регистрация: 03.07.2017
Сообщений: 12
|
|
Сообщение от Rise
|
рукалицо
|
оч полезно, спасибо
максимально подробно объяснить хотел
я понимаю что нужно заново "инициализировать"(хрен знает как верно) переменные
|
|
06.07.2017, 01:11
|
|
Профессор
|
|
Регистрация: 15.01.2015
Сообщений: 622
|
|
davisaliw,
Состояние и данные приложения обычно хранятся в базе данных. Если уж данных совсем мало, то можно и в обычные файлы записывать.
Если у вас сложные данные с зависимостями, то берите реляционную БД (mysql, oracle, postgresql and etc...), если совсем простые, то key-value хранилище.
Вы можете вообще "не хранить" переменную непосредственно в nodejs, а всегда ходить в БД, чтобы взять или изменить её значение.
Все зависит от решаемой задачи. Вы в своем вопросе не пишите какую именно задачу вы пытаетесь решить, поэтому дать вам правильное решение просто невозможно.
|
|
06.07.2017, 10:43
|
Интересующийся
|
|
Регистрация: 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.
|
|
06.07.2017, 11:44
|
|
Профессор
|
|
Регистрация: 15.01.2015
Сообщений: 622
|
|
А check в вашем коде это синглтон?
Ну пишите тогда внутри функции которая его использует так:
check.cn_el = z
|
|
06.07.2017, 11:49
|
Интересующийся
|
|
Регистрация: 03.07.2017
Сообщений: 12
|
|
Сообщение от EmperioAf
|
А check в вашем коде это синглтон?
Ну пишите тогда внутри функции которая его использует так:
check.cn_el = z
|
нет, там цикл у некоторых переменных
нужно что то глобальное на все код, мб взять всё в функцию
|
|
06.07.2017, 11:52
|
|
Профессор
|
|
Регистрация: 15.01.2015
Сообщений: 622
|
|
Пример вашего кода пожалуйста напишите, из ваших постов вообще не понятно что вы имеете ввиду.
|
|
06.07.2017, 12:47
|
Интересующийся
|
|
Регистрация: 03.07.2017
Сообщений: 12
|
|
Сообщение от EmperioAf
|
Пример вашего кода пожалуйста напишите, из ваших постов вообще не понятно что вы имеете ввиду.
|
я бы с радостью, но не получается воспроизвести похожий код;
я ошибся, сказав что она не объявлена - объявлена, но все равно какой то баг;
Получается так:
К каждому новому запросу, в check.cn_el прибавляется новое значение, но старое при этом не затирается - а нужно только новое(новые если цикл).
Старое значение убирается только перезапуском сервера.
Я взял check.cn_el как пример. Там много переменных, с которыми происходит тоже самое
|
|
06.07.2017, 13:26
|
|
Профессор
|
|
Регистрация: 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'}
|
|
06.07.2017, 15:05
|
Интересующийся
|
|
Регистрация: 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.
|
|
|
|