从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(); });
- Express和Typescript – Error.stack和Error.status属性不存在
- TypeError:Object#<Object>在节点中没有方法“Router”
- 访问socket.on('connection')闭包之外的套接字
- 如何在Express.js布局中使用partials?
- 蓝鸟答应在快递/mongoose中过早返回
- 用Jade / Stylus使用Node的最佳“GUI”IDE
- 将Blur-Admin模板集成到Nodejs Express项目中
- Node / Express.js – 重写查找每个请求的“视图”文件夹的位置
- socket.io路由问题与node.js表示3应用程序运行在虚拟目录与iisnode