app.post('/', function (req, res) {
var foo = req.body + "";
someFunction(foo).promise()
.then(function(){
res.set('Content-Type', 'text/plain');
res.send(foo);
});
})
我做了一个如上所示的简单例子。我想知道,如果我有很多来自客户的 POST 请求,可能会同时 req.body 更改每个, res.send(foo) 中的foo 导致错误的响应发送给发布此内容的原始客户端?因为 foo 在每个上下文中都在发生变化,所以这会导致响应客户端发送错误的值吗?
如果客户A发送" Hello"当许多其他客户发送不同的字符串时,客户A会保证接收" Hello"来自服务器的回应?如果不能保证,我怎么能在 .then(function(){}) 中没有参数的情况下解决这个问题?
答案 0 :(得分:1)
每个req
对象对于每个请求都是唯一的。因此,来自一个请求的req
对象与来自另一个请求的req
对象之间没有任何关联,另一个请求所发生的事情不会影响此req
对象。每个请求处理函数范围对于每个请求也是独立的。
您必须确保someFunction()
所做的不使用任何共享变量,以免它导致任何并发问题,但您在此处显示的代码本身不会导致任何并发问题。
此外,foo
是一个局部变量,它仅对请求处理程序的这种调用是本地的。另一个请求将具有不同的函数范围和不同的变量foo
。
如果客户A发送" Hello"当许多其他客户发送不同的字符串时,客户A会保证接收" Hello"来自服务器的回应?
是的,我们会保证得到正确的答复。这不是您需要担心的问题。
如果在更高的范围(例如模块范围或全局范围)中声明了foo
,因此可以从每个请求处理程序访问完全相同的变量,那么就会出现问题。只要变量是请求处理程序范围的本地变量或req
对象中的属性,就没有问题。