【发布时间】:2019-10-12 14:07:38
【问题描述】:
情况:
我正在使用 ReactJS 和 ExpressJS 构建一个 Web 应用程序(SPA)。我正在使用 Socket.IO 进行实时聊天。当我构建我的应用程序并在 localhost 上运行它时,一切正常,所以我决定将它部署在 Heroku 上。我的应用在 Heroku 上成功构建并可以使用了。
问题:
所以我进入我的应用程序,看看它是否在 Heroku 上运行良好。当我进入登录页面和注册页面时,应用程序似乎没问题(这些页面不与 Socket.IO 一起使用)。但是当我进入聊天页面时(该页面使用Socket.IO进行实时聊天),客户端崩溃,没有加载并抛出以下错误。
错误:
我收到以下错误:
> Uncaught TypeError: Cannot read property 'DEBUG' of undefined
at load (browser.js:168)
at Object.eval (browser.js:178)
at eval (browser.js:197)
at Object../node_modules/socket.io-client/node_modules/debug/src/browser.js (vendor.js:2639)
at __webpack_require__ (main.js:788)
at fn (main.js:151)
at eval (url.js:7)
at Object../node_modules/socket.io-client/lib/url.js (vendor.js:2628)
at __webpack_require__ (main.js:788)
at fn (main.js:151)
当我在线查看模块时,它有以下检查:
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
if (!r && typeof process !== 'undefined' && 'env' in process) {
r = undefined.DEBUG; //the error is showed here
}
所以我在本地主机上启动我的应用程序并搜索上面的代码,我得到了这个:
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
if (!r && typeof process !== 'undefined' && 'env' in process) {
r = { /*A JSON object contains .env variables*/ }.DEBUG;
}
代码:
这是我的服务器:
//requirements...
const socket = require("./server/socket");
const app = express();
const server = http.createServer(app);
const port = process.env.PORT || 3000;
//middlewares...
//routes...
//database connection...
socket(server);
server.listen(port);
console.log("Server started on: " + port);
我的套接字设置:
const socketIO = require("socket.io");
const socket = server => {
const io = socketIO(server);
const chat = io.of("/chat");
chat.on("connection", client => {
console.log("User started chat!");
client.on("disconnect", () => {
console.log("User left chat!");
});
client.on("sendMessage", msg => {
const data = msg;
client.broadcast.emit("incomingMessage", { data });
});
});
};
module.exports = socket;
使用 Socket.IO 的 React 组件:
const _ChatBox = ({ props }) => {
const [connection] = useState(io("/chat"));
useEffect(() => {
connection.on("incomingMessage", message => {
//receive message...
});
}, []);
const sendMessageToSocket = data => {
connection.emit("sendMessage", data);
};
return (
/* JSX here */
);
};
我想要什么:
我想知道我的代码是否有任何问题。当我将我的应用程序部署到 Heroku 时,是否需要在 Heroku 上进行任何额外设置才能使我的应用程序与 Socket.IO 一起使用?
【问题讨论】:
-
什么是崩溃?服务器还是客户端?
-
@VaughanHilts 客户
标签: javascript reactjs express heroku socket.io