0

http response.write メソッドの送信/書き込みプロセスを監視するための解決策を探しています。

イベント(私の場合はセキュリティトークンを使用した2番目のリクエスト)が表示された(または表示されない)ときに、実行中のプロセスを監視および停止できるようにしたいと考えています。

これは一般的に可能ですか?もしそうなら、誰かが私のためにコードの平和を持っていますか?

これは、コードラインを切り取ったコーヒーです

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 ファイル、「バイナリ」行の両方をある種の関数または処理でラップする方法はありますか?

敬具

4

1 に答える 1

1

もちろん。次のようなことができます:

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 スタックの最上位にあるミドルウェアに配置すると、自分のミドルウェアだけでなく、すべてのミドルウェアからのすべての書き込みを監視できます。

別物:

コードでは、 と を指定Content-LengthしますTransfer-Encoding: chunked。二人は付き合わない。これchunkedが、Chrome (および他のブラウザー...) が0最後に を必要とする理由です。チャンク エンコーディングは「ブロック」で提供され、各ブロックはその長さの ASCII 16 進表現で始まります。Thing は空のチャンク (つまり、データを持たない長さ 0 のチャンク) で終了します。その後に CR-LF も追加する必要があります。

于 2013-09-17T11:52:05.813 に答える