2015-10-10 2 views
0

Я использую тег html5 для воспроизведения mp3. Я использую узел для отправки HTML как таковой:Обслуживание html5 через nodejs

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 работал так, как ожидалось. Я пробовал поиск в Интернете, и единственное, что похоже на это, - это API веб-аудио. Или, может быть, мне нужно указать что-то в заголовках ответов? Очевидно, я очень смущен здесь, и любые указатели будут оценены.

+0

Когда вы открываете файл, тогда 'file: /// Users/alex/yodog/DTSE9.mp3' является абсолютным путем в вашей файловой системе, и mp3 там находится. После того, как он на сервере, браузер пытается получить http: // localhost: 1337/Users/alex/yodog/DTSE9.mp3', которого, вероятно, не существует. Вы должны увидеть ошибку 404 на вкладке «Инструменты разработчика». – pawel

+0

Хорошо, что имеет смысл. Я исследовал инструменты разработчика, и браузер действительно делает еще один запрос на mp3. Однако, учитывая мою базовую реализацию сервера, он получает 200 OK. Этого следует ожидать. Я собираюсь попробовать изменить мой сервер, а затем предоставить обновление –

ответ

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') 
Смежные вопросы