Javascript Node.js服务器请求对象在函数中定义时似乎未被隔离
考虑以下代码:Javascript Node.js服务器请求对象在函数中定义时似乎未被隔离,javascript,node.js,callback,webserver,isolation,Javascript,Node.js,Callback,Webserver,Isolation,考虑以下代码: const http = require("http") const port = 8080 let myServer = http.createServer() myServer.listen(port) function serverSetOnFunctionAndDoRequest() { myServer.on("request",(req, res) => { res.writeHead(200)
const http = require("http")
const port = 8080
let myServer = http.createServer()
myServer.listen(port)
function serverSetOnFunctionAndDoRequest() {
myServer.on("request",(req, res) => {
res.writeHead(200)
res.write("OK!")
res.end()
})
http.get('http://localhost:' + port)
}
serverSetOnFunctionAndDoRequest()
serverSetOnFunctionAndDoRequest()
// Intentionally twice
我定义了一个服务器并对其执行两个请求。这里的特殊之处在于,myServer.on(“request”
事件处理程序函数设置在执行请求的函数中(serversetonfunctionandorrequest
)。
出于某种原因,这对我编写测试很方便。
我原以为每次调用该函数时,都会注册另一个事件处理程序回调并将其隔离。然而,情况似乎恰恰相反。我会在结束后得到ERR\u STREAM\u WRITE\u
如果我将myServer.on(“request”
置于serversetonfunctionandorequest
之外,则不会发生这种情况。我唯一的解释是,这两个请求都使用了相同的res
实例
那么,为什么会这样?我该如何解决这个问题呢?这是因为任何请求都只能有一个响应。如果注册两个事件处理程序,第一个会发送响应,这就是预期的结果,第二个响应是意外的,这就是您出现错误的原因