Node.js:全局变量是否在实例之间共享?

时间:2018-09-18 12:47:33

标签: javascript node.js asynchronous async-await global-variables

我有此代码:

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 :(得分:4)

  

这是真的吗?

是的。 (嗯,实际上是的。真正的答案是首先没有“多个实例”:您有一台服务器,多个用户向多个服务器发出请求。)

如果要将数据与特定的浏览器会话相关联,请使用session(NPM模块可以处理Express的会话)。

答案 1 :(得分:-1)

这实际上取决于您在何处声明这些变量。

请阅读JS中有关“变量范围”的一些文档。

当那里有很多写得很好且生动描述的说明时,很难在这里进行解释。

如果在代码区域中声明了一些针对每个用户请求重新读取的变量,则该变量对于每个用户将有所不同。

如果在该部分旁边声明变量,则对于Node-application的每个操作,该内容都是相同的。