2017-09-15 3 views
5

私は、明示的に使用して、spawnedコマンド(ffmpeg、重要ではない)からstdoutをパイプしていますが、子procが失敗した場合、私はまだ200を取得します。生成されたコマンドの出力をパイプするときにエラーを返すにはどうすればよいですか?

私は500を返すことはできますか?終了コードはゼロではありませんでしたか? (私はヘッダがaleadyそれまでに送られてきたと思います):

const express = require('express'); 
const { spawn } = require('child_process'); 

var app = express(); 

app.get('/video', function(req, res) { 
    var cmd = "ffmpeg"; 
    var args = ["--wat"]; 
    var proc = spawn(cmd, args); 
    res.contentType('video/mp4'); 
    proc.stdout.pipe(res); 
    proc.stderr.pipe(process.stdout); 
    proc.on("exit", code => { 
     console.log("child proc exited:", code); 
     //res.status(code > 0 ? 500 : 200).end(); 
    }); 
    res.on("close",() => { 
     proc.kill("SIGKILL"); 
    }); 
}); 

app.listen(4000); 

答えて

0

それはpipe方法が応答に終わりを呼び出していることが判明しました。したがって、解決策は自分で行うことです。

proc.stdout.pipe(res, {end: false}); 
proc.on("error", err => { 
    console.log("error from ffmpeg", err.stack); 
    res.status(500).end(); 
}); 
proc.on("exit", code => { 
    console.log("child proc exited", code); 
    res.status(code === 200 ? 200 : 500).end(); 
}); 
関連する問題