Как мне закрыть fs.createWriteStream? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь использовать модуль узла 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);
    }) 
})

1 Ответ

0 голосов
/ 24 мая 2019

Я выяснил, в чем заключалась моя проблема, надеюсь, однажды она может пригодиться кому-то еще.

Ранее мне требовался мой модуль во главе файла моего маршрутизатора:

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

И это работает.

...