2017-09-15 61 views
5

mam potokiem stdout od A zrodził Command (ffmpeg, że nie jest to ważne) używając express, ale jeśli dziecko nie Proc I jeszcze dostać 200.Jak mogę zwrócić błąd podczas wyprowadzania wyjścia z polecenia spawnowanego?

Czy jest jakiś sposób mogę powrócić 500, jeżeli kod wyjścia był niezerowy? (Myślę, że nagłówki są aleady została wysłana przez):

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); 

Odpowiedz

0

Okazuje się, że metoda pipe dzwoni końcówkę na odpowiedź. Tak więc rozwiązaniem jest samodzielne wykonanie:

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(); 
});