【问题标题】:How do I close fs.createWriteStream?如何关闭 fs.createWriteStream?
【发布时间】:2019-10-10 13:11:03
【问题描述】:

我正在尝试使用节点模块vtt2srt 将 VTT 字符串转换为 SRT 文件并保存输出。它可以运行一次,并且我的字幕已正确保存,但是如果我再次点击端点,则节点会因此错误而崩溃:

Error: write after end
at writeAfterEnd 

我已经尝试了 .close .on('close') 的所有组合

我从前端发送一个唯一的 vid 和 VTT 数据

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);
    }) 
})

【问题讨论】:

    标签: node.js fs


    【解决方案1】:

    我解决了我的问题,希望有一天它对其他人有用。

    以前我需要将我的模块放在路由器文件的开头:

    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) });
        })
    })
    

    而且它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 2021-08-04
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 2019-07-30
      • 2015-09-28
      相关资源
      最近更新 更多