更改
var server = app.listen(3000);
收件人
var server = app.listen(process.env.PORT || 5000);
我想在Heroku上部署使用JavaScript制作的游戏。
这是我的服务器:
var express = require('express');
var app = express();
var server = app.listen(3000);
var socket = require('socket.io');
var io = socket(server);
app.use(express.static('public'));
var connectedPlayers = {};
console.log("Server is running!");
io.on('connection',
function (socket) {
socket.on('newPlayer',
function (data) {
console.log("New player connected - ID: " + data.id);
connectedPlayers[socket.id] = {
idOnline: socket.id,
idOffline: data.id,
x: data.w,
y: data.h
};
socket.emit('allPlayers', connectedPlayers);
socket.broadcast.emit('newPlayer', connectedPlayers[socket.id]);
});
socket.on('move',
function (data) {
connectedPlayers[socket.id].x = data.x;
connectedPlayers[socket.id].y = data.y;
socket.broadcast.emit('move', connectedPlayers[socket.id]);
});
socket.on('message',
function (data) {
message = {
name: data.name,
message: data.message,
messageId: generateId()
};
socket.broadcast.emit('message', message);
});
socket.on('emote',
function (data) {
message = {
emote: data.emote,
id: socket.id
}
socket.broadcast.emit('emote', message);
});
socket.on('disconnect', function () {
delete connectedPlayers[socket.id];
io.emit('remove', socket.id);
});
});
这项工作在本地很好,但是当我部署到heroku时,我收到此错误消息:
2018-11-23T21:04:18.009491+00:00 app[web.1]: /app/server.js:33
2018-11-23T21:04:18.009512+00:00 app[web.1]: connectedPlayers[socket.id].x = data.x;
2018-11-23T21:04:18.009514+00:00 app[web.1]: ^
2018-11-23T21:04:18.009516+00:00 app[web.1]:
2018-11-23T21:04:18.009518+00:00 app[web.1]: TypeError: Cannot set property 'x' of undefined
我知道heroku不能识别该索引处的“ connectedPlayers”数组,但是如何在本地正常工作? socket.id属性有什么问题? PS .: socket.id由客户端发送,但是我认为这是在客户端与服务器建立连接之后生成的吗?
答案 0 :(得分:0)
在寻找了很多解决方案之后,我正在尝试疯狂的事情来插入:
process.env.PORT || 5000
在服务器上。
如您在问题代码中所见,我发布了一个过期的代码,其中包含以下行(我的第一次尝试):
var server = app.listen(3000);
解决方案比我想的要简单,只是将上面的代码行更改为:
var server = app.listen(process.env.PORT || 5000);