假设我有一个简单的代码,它以.XML文件响应。
app.post '/incoming', (req,res) ->
console.log "Hello, incoming call!"
message = req.body.Body
from = req.body.From
sys.log "From: " + from + ", Message: " + message
test = "hello"
r = new Twiml.Response()
r.append(new Twiml.Say('Hello, there!' + test + ' Enter your ATM card PIN'))
console.log(r.toString())
res.send r.toString()
如果有2个请求同时出现,是否有可能得到错误的回复?我问这个是因为我不完全理解异步是如何工作的,如果这是我想做的事情。
由于
答案 0 :(得分:2)
如果您想知道响应所针对哪个客户端,除了与res
交互的代码之外,请删除正文中的所有代码,如下所示:
app.post '/incoming', (req,res) ->
res.send r.toString()
现在您可以看到您将r.toString()
发送到正确的回复。
如果有2个请求同时出现,
是否可能
即使有2个请求同时出现,javascript也是单线程和阻塞,所以从来没有任何竞争条件。
答案 1 :(得分:2)
您所询问的内容实际上是关于CoffeeScript范围的问题。当你有一个功能时,例如
(req, res) ->
然后在该函数中,您可以确信req
和res
将始终指向传递给函数的对象。唯一的例外是如果您有一个具有相同参数名称的嵌套函数。例如,
(req, res) ->
setTimeout ((req, res) -> console.log req, res), 1
当使用任何值调用外部函数时,将显示undefined
,undefined
,因为传递给setTimeout
的函数有自己的req
和res
shadow 外部req
和res
。
显然你没有这样做(而且你不应该这样做),所以你不必担心。您的服务器每秒可以ping几万次,每个req
和res
将保持不同。