我已经搜索了一段时间来解决这个问题,但是找不到太多。
我的目标是从udp客户端接收消息,服务器接收该消息并转发到Web客户端,每次收到消息时都会播放音频剪辑。但是,由于某种原因,音频将无法播放。如果我直接从我的目录打开页面,可以播放音频,但如果我尝试通过localhost访问它,则无法加载。有谁知道解决方案?
这是客户端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/
有没有人对如何解决这个问题有任何想法?
答案 0 :(得分:0)
当您对静态文件的Express配置不正确时,通常会发生此错误。
从客户端JavaScript我可以看到您将静态文件存储在public
文件夹中。
所以在服务器端的某个地方你应该有这样的东西:
app.use('/public', express.static('/path/to/public'));
这样http://localhost/public/audio/Bloom.mp3
请求将与/path/to/public/audio/Bloom.mp3
文件一起提供。
<强>警告:强>
从Express 4开始,"no more app.use(app.router)"和“所有路由方法将按照它们出现的顺序添加”。这意味着您必须在上一行app.get(...)
,app.post(...)
等之前添加上述代码。
希望这些信息对某人有所帮助。