从spawned命令pipe道输出时,如何返回一个错误?

我使用express来从命令(ffmpeg,不要紧)输出stdout,但如果subprocess失败,我仍然会得到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); 

事实certificate, 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(); });