2017-09-15 48 views
5

我用快遞管道從催生命令的標準輸出(ffmpeg的,這不是問題),但如果孩子PROC失敗我仍然獲得了200如何在從派生命令輸出管道時返回錯誤?

有什麼辦法,我可以返回500,如果退出代碼是非零? (我認爲標頭已位於被再發送):

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(); 
}); 
相關問題