Я продолжаю получать сообщение об ошибке «Переданный аргумент должен быть одной строкой из 12 байт или строкой из 24 шестнадцатеричных символов».

#node.js #mongodb #gridfs #gridfs-stream #multer-gridfs-storage

Вопрос:

У меня странная проблема с параметрами маршрута. Я пытаюсь создать простую систему потоковой передачи видео, в которой я передаю идентификатор видео (используя параметры маршрута) в поток канала и передаю фактическое видео обратно.

Видео действительно передается обратно, но я получаю ошибку «Переданный аргумент должен быть одной строкой из 12 байтов или строкой из 24 шестнадцатеричных символов», которая нарушает всю html — страницу.

Если бы кто-нибудь мог помочь мне направить меня в правильном направлении, как решить эту проблему, я был бы очень признателен!

Видео Получить Маршрут

 app.get('/v/:id', (req, res)=> {
    const videoId = mongoose.mongo.ObjectID(req.params.id)

    gfs.files.findOne({_id: videoId}, (err, file)=> {
        if(err) {
            throw err
        } else if(!file) {
            res.redirect('/')
        } else if(file) {
            res.render('Video.ejs', {file: file, title: "Video :: Clipit"})
        }
    })
})
 

Маршрут потока видеотрубки

 app.get('/api/stream/:filename', (req, res)=> {
    gfs.files.findOne({filename: req.params.filename}, (err, file)=> {
        if(err) {
            throw err
        } else {
            const readstream = gfs.createReadStream(file.filename)
            readstream.pipe(res)
        }
    })
})
 

HTML-файл видео (EJS)

 <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <%- include('./partials/Settings.ejs') %>
        <title><%= title %></title>
    </head>
    <body>
        <header>
            <%- include('./partials/Header.ejs') %>
        </header>
        <main>
            <div>
                <video id="videoPlayer" width="650" controls autoplay>
                    <source src="/api/stream/<%= file.filename %>" type="<%= file.contentType %>"/>
                </video>
            </div>
        </main>
    </body>
</html>
 

Error

 Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
    at new ObjectID (C:UsersgabriDesktopclipitnode_modulesbsonlibbsonobjectid.js:59:11)
    at Function.ObjectID (C:UsersgabriDesktopclipitnode_modulesbsonlibbsonobjectid.js:40:43)
    at C:UsersgabriDesktopclipitserver.js:66:36
    at Layer.handle [as handle_request] (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterlayer.js:95:5)
    at next (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterroute.js:137:13)
    at Route.dispatch (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterroute.js:112:3)
    at Layer.handle [as handle_request] (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterlayer.js:95:5)
    at C:UsersgabriDesktopclipitnode_modulesexpresslibrouterindex.js:281:22
    at param (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterindex.js:354:14)
    at param (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterindex.js:365:14)
    at Function.process_params (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterindex.js:410:3)        
    at next (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterindex.js:275:10)
    at urlencodedParser (C:UsersgabriDesktopclipitnode_modulesbody-parserlibtypesurlencoded.js:91:7)
    at Layer.handle [as handle_request] (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterlayer.js:95:5)
    at trim_prefix (C:UsersgabriDesktopclipitnode_modulesexpresslibrouterindex.js:317:13)
    at C:UsersgabriDesktopclipitnode_modulesexpresslibrouterindex.js:284:7
(node:7784) DeprecationWarning: GridStore is deprecated, and will be removed in a future version. Please use GridFSBucket instead
 

Примечание: Я использую хранилище GridFS для хранения видео, а поток GridFS-для потоковой передачи видео.
Заранее спасибо!