我有此代码:
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()
就可以访问它,并且当用户跟随该链接时,它将为文件提供服务。
但是一个用户告诉我,实例之间共享全局变量。
这是真的吗?因此,如果两个(或多个)用户尝试同时获得其结果,则全局变量将相同
对于他们两个?
答案 0 :(得分:4)
这是真的吗?
是的。 (嗯,实际上是的。真正的答案是首先没有“多个实例”:您有一台服务器,多个用户向多个服务器发出请求。)
如果要将数据与特定的浏览器会话相关联,请使用session(NPM模块可以处理Express的会话)。
答案 1 :(得分:-1)
这实际上取决于您在何处声明这些变量。
请阅读JS中有关“变量范围”的一些文档。
当那里有很多写得很好且生动描述的说明时,很难在这里进行解释。
如果在代码区域中声明了一些针对每个用户请求重新读取的变量,则该变量对于每个用户将有所不同。
如果在该部分旁边声明变量,则对于Node-application的每个操作,该内容都是相同的。