好的,我再一次遇到了socket.io和express的问题。当我运行我的节点js应用程序时,它在遇到错误“GET http://localhost:3000/socket.io/socket.io.js 404 (Not Found)”和"Uncaught : io is not defined“之前开始构建。这是我第二次使用web套接字,并收到相同的错误。对于之前的应用程序,我在apache服务器上设置了一个反向代理,从而修复了这个问题。它看起来像这样;
ProxyPass /socket.io http://localhost:3000/socket.io
然而,对于当前的nodejs应用程序,这并没有解决这个问题。这两个应用程序之间的主要区别是,当前的应用程序不会开始使用socket.io,直到用户将自己定向到本地主机:3000/轰炸机-孩子-在线游戏页面。当前的应用程序是第一个应用程序的扩展,也就是这个nodejs应用程序提供了一个网站,以及我之前的应用程序,这是一个托管在zEyeland.com/bomber-kids-online上的游戏。
下面是我的js文件,它向浏览器发送要加载的适当的html文件:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var express = require('express');
var router = express.Router();
var updatedMAP;
var updatedOBJECTS;
router.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
console.log("a user connected");
socket.on('sendNoramlBomb', function(xPosition, yPosition, power){
socket.broadcast.emit('sendNoramlBomb', xPosition, yPosition,
power);
});
socket.on('sendRedBomb', function(xPosition, yPosition, power){
socket.broadcast.emit('sendRedBomb', xPosition, yPosition, power);
});
socket.on('sendBlueBomb', function(xPosition, yPosition, power){
socket.broadcast.emit('sendBlueBomb', xPosition, yPosition,
power);
});
socket.on('sendGreyBomb', function(xPosition, yPosition, power){
socket.broadcast.emit('sendGreyBomb', xPosition, yPosition,
power);
});
socket.on('sendGreenBomb', function(xPosition, yPosition, power){
socket.broadcast.emit('sendGreenBomb', xPosition, yPosition,
power);
});
socket.on('sendPlayer', function(locationY, locationX, direction){
io.emit('sendPlayer',locationY, locationX, direction);
});
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
socket.on('disconnect', function(){
console.log("user disconnected");
});
});
//http.listen(3000, function(){
// console.log('listening on *:3000');
//});
module.exports = router;
这是我当前项目的apache配置
ProxyPass /socket.io http://localhost:3000/bomber-kids-online/socket.io
ProxyPassReverse /socket.io http://localhost:3000/bomber-kids-online/socket.io
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
所以重述一下正在发生的事情。我正在尝试运行一个使用websockets的nodejs游戏。当访问我的游戏在网站上的本地主机:3000/轰炸机-孩子-在线它得到一个( get http://localhost:3000/socket.io/socket.io.js 404 (未找到))我如何解决这个问题?我的反向代理这次似乎无法修复它。你可以在zeyeland.com/bomber can online上查看我的游戏的工作版本。我当前的项目使用完全相同的html和javascript文件来运行。但是,通过检查上面我的reverseProxy,您会注意到,在我当前的项目中,游戏不是直接从localhost:3000访问的,而是从服务器上的另一个js文件提供的路由访问的。
下面是我的应用程序第一个js文件的样子;
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var bomberKidsRouter = require('./routes/games/bomber-kids-online-
game');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/bomber-kids-online', bomberKidsRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
https://stackoverflow.com/questions/50846572
复制相似问题