Javascript 流媒体服务器:TypeError:无法调用方法';更换';未定义的

Javascript 流媒体服务器:TypeError:无法调用方法';更换';未定义的,javascript,node.js,webserver,intel-edison,Javascript,Node.js,Webserver,Intel Edison,我对Web服务器和node JS是一个全新的人,我在英特尔爱迪生董事会上创建并理解了一个流媒体服务器。我已经在这个网站上阅读了关于这个问题的其他帖子,但是我找不到我的问题的答案 启动.js服务器后,我可以正确连接到它,在我的客户端浏览器[我使用的是Chrome]中键入如下内容:然后显示一个视频,与教程中给出的相同。如果我想,我甚至可以激活它,它工作得很好 但看看提供的代码: http.createServer(function (req, res) { var reqResource

我对Web服务器和node JS是一个全新的人,我在英特尔爱迪生董事会上创建并理解了一个流媒体服务器。我已经在这个网站上阅读了关于这个问题的其他帖子,但是我找不到我的问题的答案

启动.js服务器后,我可以正确连接到它,在我的客户端浏览器[我使用的是Chrome]中键入如下内容:然后显示一个视频,与教程中给出的相同。如果我想,我甚至可以激活它,它工作得很好

但看看提供的代码:

http.createServer(function (req, res) {

    var reqResource = url.parse(req.url).pathname;
    //console.log("Resource: " + reqResource);

    if(reqResource == "/"){

        //console.log(req.headers)
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.write(indexPage);
        res.end();

    } else if (reqResource == "/favicon.ico"){

        res.writeHead(404);
        res.end();

    } else {

            var total;
            if(reqResource == "/movie.mp4"){
                total = movie_mp4.length;
            } else if(reqResource == "/movie.ogg"){
                total = movie_ogg.length;
            } else if(reqResource == "/movie.webm"){
                total = movie_webm.length;
            } 

            var range = req.headers.range;

            var positions = range.replace(/bytes=/, "").split("-");
            var start = parseInt(positions[0], 10);
            // if last byte position is not present then it is the last byte of the video file.
            var end = positions[1] ? parseInt(positions[1], 10) : total - 1;
            var chunksize = (end-start)+1;

            if(reqResource == "/movie.mp4"){
                res.writeHead(206, { "Content-Range": "bytes " + start + "-" + end + "/" + total, 
                                     "Accept-Ranges": "bytes",
                                     "Content-Length": chunksize,
                                     "Content-Type":"video/mp4"});
                res.end(movie_mp4.slice(start, end+1), "binary");

            } else if(reqResource == "/movie.ogg"){
                res.writeHead(206, { "Content-Range": "bytes " + start + "-" + end + "/" + total, 
                                     "Accept-Ranges": "bytes",
                                     "Content-Length": chunksize,
                                     "Content-Type":"video/ogg"});
                res.end(movie_ogg.slice(start, end+1), "binary");

            } else if(reqResource == "/movie.webm"){
                res.writeHead(206, { "Content-Range": "bytes " + start + "-" + end + "/" + total, 
                                     "Accept-Ranges": "bytes",
                                     "Content-Length": chunksize,
                                     "Content-Type":"video/webm"});
                res.end(movie_webm.slice(start, end+1), "binary");
            }
    }
}).listen(8888);
我想我还应该能够在我的客户中键入以下内容: 并在我的chrome客户端上正确接收视频片段时解决此地址。问题是,当我尝试执行此操作时,会出现以下错误:

 var positions = range.replace(/bytes=/, "").split("-");
                                  ^
TypeError: Cannot call method 'replace' of undefined
    at Server.<anonymous> (/home/root/streaming-video-html5/streaming-video-html5/server.js:66:35)
    at Server.emit (events.js:98:17)
    at HTTPParser.parser.onIncoming (http.js:2109:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:122:23)
    at Socket.socket.ondata (http.js:1967:22)
var positions=range.replace(/bytes=/,“”)。split(“”);
^
TypeError:无法调用未定义的方法“replace”
在服务器上。此错误来自未定义的
范围.replace.split
但为什么

你知道如何解决这个恼人的问题吗


提前感谢那些试图提供帮助的人

客户端可能没有在请求头中发送
范围
——这不是强制性的,因此请尝试此操作

    var range = req.headers.range;
    var start = 0, end = total - 1;
    if(range) {
        var positions = range.replace(/bytes=/, "").split("-");
        start = parseInt(positions[0], 10);
        // if last byte position is not present then it is the last byte of the video file.
        end = positions[1] ? parseInt(positions[1], 10) : total - 1;
    }

我认为应该解决它

您的解释是错误的原因,您的解决方案解决了地址问题,之后我可以正确键入观看视频而不会导致服务器崩溃。但是现在在服务器上加载任何html页面,比如192.168.1.31:8888/videolist.html,都会导致一个无休止的过程,甚至是无用的,因为最后没有加载元素。那么:1)你知道原因和解决办法吗?2) 这是我的错误印象,还是当没有提供范围时,流媒体服务器可以作为文件服务器工作?对于一个60MB的视频,我看不到它。我的想法是,在最后一个字节之前,用for循环“手动”划分块,这有意义吗?再次感谢您抽出时间