Node.js:响应是否发送给了正确的用户?

时间:2011-09-06 21:14:53

标签: javascript node.js coffeescript

假设我有一个简单的代码,它以.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个请求同时出现,是否有可能得到错误的回复?我问这个是因为我不完全理解异步是如何工作的,如果这是我想做的事情。

由于

2 个答案:

答案 0 :(得分:2)

如果您想知道响应所针对哪个客户端,除了与res交互的代码之外,请删除正文中的所有代码,如下所示:

app.post '/incoming', (req,res) ->
    res.send r.toString()

现在您可以看到您将r.toString()发送到正确的回复。

  

如果有2个请求同时出现,

是否可能

即使有2个请求同时出现,javascript也是单线程和阻塞,所以从来没有任何竞争条件。

答案 1 :(得分:2)

您所询问的内容实际上是关于CoffeeScript范围的问题。当你有一个功能时,例如

(req, res) ->

然后在该函数中,您可以确信reqres将始终指向传递给函数的对象。唯一的例外是如果您有一个具有相同参数名称的嵌套函数。例如,

(req, res) ->
  setTimeout ((req, res) -> console.log req, res), 1
当使用任何值调用外部函数时,

将显示undefinedundefined,因为传递给setTimeout的函数有自己的reqres shadow 外部reqres

的参数

显然你没有这样做(而且你不应该这样做),所以你不必担心。您的服务器每秒可以ping几万次,每个reqres将保持不同。