Ситуация:
Я создаю веб-приложение (SPA) с ReactJS и ExpressJS.Я использую Socket.IO для чата в реальном времени.Когда я собираю свое приложение и запускаю его на локальном хосте, все работает нормально, поэтому я решил развернуть его на 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
}
Итак, я запускаю свое приложение наlocalhost и поиск по вышеуказанному коду, я получаю это:
// 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);
Мой сокетsetup:
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:
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?