我正在使用快速从生成的命令(ffmpeg,而不是它重要)管道stdout,但是如果子进程失败,我仍然得到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);
Run Code Online (Sandbox Code Playgroud)
事实证明,管道方法正在响应上调用 end。所以解决方案是你自己做:
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();
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
133 次 |
最近记录: |