node.js - How do I close fs.createWriteStream?
问题描述
I am trying to use the node module vtt2srt to convert a VTT string to SRT file and save the output. It works once, and my subtitles are saved correctly, but if I hit the endpoint a second time node crashes with this error:
Error: write after end
at writeAfterEnd
I have tried all combinations of .close .on('close')
I send a unique vid and the VTT data from the frontend
router.post('/downloadsubs', function(req,res,next) {
var vttObj = webvtt.compile(req.body.data);
fs.unlink(__dirname + '/../static/videos/'+req.body.vid+'/subtitles.srt', function(){
srtStream.write(vttObj);
var writestream = fs.createWriteStream(__dirname + '/../static/videos/'+req.body.vid+'/subtitles.srt')
srtStream.end()
srtStream.pipe(writestream)
res.send(req.body.vid);
})
})
解决方案
我解决了我的问题,希望有一天它对其他人有用。
以前我需要我的模块在我的路由器文件的开头:
const vtt2srt = require('node-vtt-to-srt');
const srtStream = vtt2srt();
router.post('/downloadsubs', function(req,res,next) {
var vttObj = webvtt.compile(req.body.data);
fs.unlink(__dirname + '/../static/videos/'+req.body.vid+'/subtitles.srt', function(){
srtStream.write(vttObj);
srtStream.end()
var writestream = fs.createWriteStream(__dirname + '/../static/videos/'+req.body.vid+'/subtitles.srt');
srtStream.pipe(writestream)
writestream.on('finish', function () { res.send(req.body.vid) });
})
})
现在,相反,我在路由器方法中创建了一个新的 srtStream:
const vtt2srt = require('node-vtt-to-srt');
router.post('/downloadsubs', function(req,res,next) {
var srtStream = vtt2srt();
var vttObj = webvtt.compile(req.body.data);
fs.unlink(__dirname + '/../static/videos/'+req.body.vid+'/subtitles.srt', function(){
srtStream.write(vttObj);
srtStream.end()
var writestream = fs.createWriteStream(__dirname + '/../static/videos/'+req.body.vid+'/subtitles.srt');
srtStream.pipe(writestream)
writestream.on('finish', function () { res.send(req.body.vid) });
})
})
它有效。
推荐阅读
- javascript - React Native Fetch POST TypeError:标题字段名称中的字符无效
- git - 升级到 Git 2.27 后的 git 消息“加载 pubkey ... 无效格式”
- google-cloud-platform - 允许 IAP 访问但拒绝门户上的任何其他实例列表
- c++ - gcc:从静态库中的模板静态成员编译的弱符号在链接期间似乎丢失了
- c - 关于在 c 中的函数内传递 const 的问题
- javascript - 隐藏事件中的元素
- laravel - 我收到错误,传递给 Illuminate\Database\Grammar::parameterize() 的参数 1 必须是数组类型,给定整数,调用
- javascript - 在 react-native 中下载 "Content-Disposition": "attachment; filename=example.mp3"
- smtp - PHPMailer SMTP 端口 25 连接问题(10060)但通过 Outlook 的相同连接成功
- listview - 自定义导航栏项目在 SwiftUI 的列表详细信息视图中处于非活动状态/不起作用