2017-09-15 24 views
5

मैं एक पैदा की कमान से stdout (ffmpeg, नहीं है कि यह मायने रखती है) पाइप रहा हूँ एक्सप्रेस का उपयोग करते हुए, लेकिन अगर बच्चे को 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(); 
}); 
संबंधित मुद्दे

 संबंधित मुद्दे