通过nodejs提供html5

时间:2015-10-10 19:05:26

标签: javascript node.js html5 audio

我正在使用html5的标签来播放mp3。我正在使用Node发送html:

 var http = require('http')
 var fs = require('fs')
 var html = fs.readFileSync(__dirname + '/some.html')
 http.createServer(function(req,res){
      res.writeHead(200, {"Content-Type" : "text/html"})
      res.write(html)
      res.end()
 }).listen(1337)
 console.log('Server is listening on 1337')

some.html标记如下所示:

 <!DOCTYPE html>
  <html>
  <body>
  <audio id="player" src="/Users/alex/yodog/DTSE9.mp3" controls>
  </audio>
  </body>
  </html>

我想我在这里遗漏了一些东西,因为当我在浏览器中打开相同的html文件时,一切都按预期工作。但是,当我使用节点传递html时,没有任何东西可以播放。小音频控件不显示音轨的长度,按下播放不起作用。

我认为这部分涉及html5的实施问题。我的服务器需要做'某事'才能使html5按预期工作。我尝试过在线搜索,与此相关的唯一事情就是Web Audio API。或者我可能需要在响应头中指定一些内容?显然我在这里很困惑,任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

好的,这是更新的代码,解决了我的问题。基本上,当节点将html传递给客户端时,客户端会再次发出音频请求。我的服务器不能容纳这个。下面是更新的服务器,您将看到当请求要求音频时,我发送音频。

 var http = require('http')
 var fs = require('fs')

 http.createServer(function(req,res){
     var url = req.url
     if(url === '/Users/alex/yodog/DTSE9.mp3')
     {
        res.writeHead(200, {"Content-Type" : "audio/mpeg"})
        var audio = fs.createReadStream(__dirname + '/DTSE9.mp3')
        audio.on('end', function(){
            console.log('no more audio')
            res.end()
        })
        audio.pipe(res)


     }
     else
     {
       res.writeHead(200, {"Content-Type" : "text/html"})
       var html = fs.createReadStream(__dirname + '/some.html')
       html.on('end', function(){
         console.log('no more html')
         res.end()
     })
     html.pipe(res)
   }

}).listen(1337)
console.log('Server is listening on 1337')