node.js – 从生成的命令输出管道输出时如何返回错误?

我正在使用快速生成的命令(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);

解决方法

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

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...