Node.js nodejs-http response.write的钩子或注入

Node.js nodejs-http response.write的钩子或注入,node.js,http,Node.js,Http,我正在寻找一个解决方案,以监视http response.write方法的发送/写入过程 我希望能够在事件(在我的情况下是带有安全令牌的第二个请求)出现(或未出现)时监视和停止正在运行的进程 这在一般情况下是可能的吗?如果是的话,有没有人能给我一些代码上的和平 这是一段截取的代码线 if req.headers.range? console.log "serve range request from cache" # browser wants chunged transmiss

我正在寻找一个解决方案,以监视http response.write方法的发送/写入过程

我希望能够在事件(在我的情况下是带有安全令牌的第二个请求)出现(或未出现)时监视和停止正在运行的进程

这在一般情况下是可能的吗?如果是的话,有没有人能给我一些代码上的和平

这是一段截取的代码线

if req.headers.range?
    console.log "serve range request from cache"
    # browser wants chunged transmission
    range = req.headers.range
    parts = range.replace(/bytes=/, "").split "-"
    partialstart = parts[0]
    partialend = parts[1]
    total = file.length
    start = parseInt partialstart, 10
    end = if partialend then parseInt partialend, 10 else total - 1

    header["Content-Range"] = "bytes #{start}-#{end}/#{total}"
    header["Accept-Ranges"] = "bytes"
    header["Content-Length"]= (end-start)+1
    header['Transfer-Encoding'] = 'chunked'
    header["Connection"] = "close"

    res.writeHead 206, header
    # yeah I dont know why i have to append the '0'
    # but chrome wont work unless i do
    res.write file.slice(start, end)+'0', "binary"
  else
    console.log "serve normal request from cache"
    # reply to normal un-chunked request
    res.writeHead 200, header
    res.write file, "binary"
    console.log err if err
  res.end()
有没有一种方法可以将res.write文件的两行“二进制”行包装在某种函数或进程中,这样就可以终止


亲切的问候

当然。您可以执行以下操作:

origWrite = res.write

res.write = function(buffer, encoding) {
    // do some monitoring, starting, stopping, whatever you like
    retval = origWrite(buffer, encoding);
    // do some more monitoring, starting, stopping, whatever you like
    return retval;
}
将此代码放在express堆栈顶部的中间件中,这样您就可以监视来自所有中间件的所有写入,而不仅仅是您自己的

还有一件事:

在代码中,指定
内容长度
传输编码:分块
。这两个不在一起。
chunked
就是为什么Chrome(和任何其他浏览器…)希望
0
在末尾:chunked编码以“块”的形式出现,每个块以其长度的ASCII十六进制表示开始。事情以一个空块结束(即:长度为0且没有数据的块)。你也应该在那之后加一个CR-LF