当从socket.io – node.js接收到消息时,从客户端播放audio

我已经寻找了一个解决这个问题的时间,但没有find太多。

我的目标是从udp客户端收到一条消息,服务器接收并转发给Web客户端,每次收到消息时都会播放一个audio剪辑。 但是,由于某些原因,audio不能播放。 如果我直接从我的目录打开页面,audio可以播放,但如果我尝试通过本地访问它,它无法加载。 有谁知道一个解决scheme?

这里是客户端JavaScript。

var mySound = new Audio('/public/audio/Bloom.mp3'); mySound.load(); var socket = io.connect('http://localhost'); socket.on('message', function(data){ console.log(data); $('#content').text(data); mySound.play(); //document.getElementById('audiotag1').play(); }); 

这个页面是由server.js服务的,它是一个使用socket.io和express的node.js文件。 我没有收到我的console.log中的任何错误。 这里是server.js

 var app = require('express')() , server = require('http').Server(app) , io =require('socket.io')(server) , dgram = require('dgram'); var httpPort = 1234; var udpPort = 5000; server.listen(httpPort); app.use(server.express.static( __dirname + '/public')); app.get('/', function(request, response){ var ipAddress = request.socket.remoteAddress; console.log("New express connection from: " + ipAddress); response.sendfile(__dirname + '/public/index.html'); }); var udpSocket = dgram.createSocket('udp4', function(msgBuffer){ var jsonMessage = JSON.parse(msgBuffer); io.sockets.emit('message', JSON.stringify(jsonMessage)); }); udpSocket.bind(udpPort, '127.0.0.1'); 

你可以去这个链接看到错误chrome了。 http://postimg.org/image/xkv7a2kwb/

有没有人有任何想法如何解决这个问题?

当您对静态文件有不正确的Expressconfiguration时,通常会发生此错误。

从您的客户端JavaScript中,我可以看到您将静态文件存储在公用文件夹中。

所以在服务器端你应该有这样的东西:

 app.use('/public', express.static('/path/to/public')); 

这样做http://localhost/public/audio/Bloom.mp3请求将被提供/path/to/public/audio/Bloom.mp3文件。

警告:

由于Express 4有“没有更多的app.use(app.router)”和“所有的路由方法将按它们出现的顺序添加”。 这意味着您必须在第一个app.get(...)app.post(...)等之前放置以上代码行

希望这个信息会帮助别人。