Node.js: разделяются ли глобальные переменные между экземплярами? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть этот код:

app.post('/pst', function(req, res) {
        var url = req.body.convo;


                myAsyncFucntion(url).then(result => { 
                    console.log('TAKE A LOOK AT THIS!');


                    //transforming array to string to pass to Buffer.from()
                    //then we remove ',' with newlines, so each index of array is a new line
                    var str = result.toString();
                    result = str.split(',').join('\r\n');


                    //clever way to send text file to client from the memory of the server
                    var fileContents = Buffer.from(result, 'ascii');
                    var readStream = new stream.PassThrough();
                    readStream.end(fileContents);
                    res.set('Content-disposition', 'attachment; filename=' + fileName);
                    res.set('Content-Type', 'text/plain');
                    readStream.pipe(res);

                    //garbage collecting. i don't know if it's neccessary
                    result = '';
                    str = '';

                }).catch(err => {
                    console.log(err);
                    res.render('error.ejs');
                })
});

Этот код запускает асинхронную функцию и предоставляет пользователю некоторые данные из памяти в виде текстового файла.Я планирую использовать сокеты и уведомить клиента о том, что работа выполнена.Клиент введет ссылку и загрузит файл.

Поэтому я планирую взять результат локальной переменной и экспортировать его в глобальную переменную.Таким образом, app.get() будет иметь доступ к нему, и когда пользователь перейдет по этой ссылке, он будет обслуживать файл.

Но пользователь сказал мне, что глобальные переменные совместно используются экземплярами.

Это правда?Таким образом, если два (или более) пользователя попытаются получить свои результаты одновременно, глобальные переменные будут одинаковыми

для них обоих?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Это действительно зависит от того, где вы объявляете эти переменные.

Пожалуйста, прочтите некоторую документацию по "области видимости переменных" в JS.

Трудно объяснить это здесь, когда есть много хорошо написанныхи наглядные объяснения там.

Если в области кода, которая читается заново для каждого пользовательского запроса, объявляется некоторая переменная, то эта переменная будет отличаться для каждого пользователя.

Если выобъявите переменную ourside этой части, тогда это содержимое будет одинаковым для каждого действия вашего Node-приложения.

0 голосов
/ 18 сентября 2018

Это правда?

Да.(Ну, по сути, да. Реальный ответ заключается в том, что в первую очередь нет «нескольких экземпляров»: у вас есть один сервер, к которому несколько пользователей обращаются с несколькими запросами.)

Если вы хотите связать данныес определенным сеансом браузера, затем используйте сеанс (модули NPM для обработки сеансов существуют для Express).

...