Я новичок в node.js, хочу запустить простой чат с помощью сервиса heroku и библиотеки socket.io. Я подключил heroku к своему репозиторию и начал сборку. Все прошло как надо. Но как это запустить на сервере heroku? Данный код не работает на сервере heroku.
Локально код отрабатывает как надо.
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected')
});
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
})
socket.broadcast.emit('hi')
});
http.listen(3000, () => {
console.log('listening on *:3000');
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>Socket.IO chat</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font: 13px Helvetica, Arial;
}
form {
background: #000;
padding: 3px;
position: fixed;
bottom: 0;
width: 100%;
}
form input {
border: 0;
padding: 10px;
width: 90%;
margin-right: .5%;
}
form button {
width: 9%;
background: rgb(130, 224, 255);
border: none;
padding: 10px;
}
#messages {
list-style-type: none;
margin: 0;
padding: 0;
}
#messages li {
padding: 5px 10px;
}
#messages li:nth-child(odd) {
background: #eee;
}
</style>
</head>
<body>
<ul id="messages"></ul>
<form id="form" action="">
<input id="m" autocomplete="off" />
<button>Send</button>
</form>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
const form = document.getElementById('form');
let inpitVal = document.getElementById('m');
const messagesContainer = document.getElementById('messages');
form.addEventListener('submit', (e) => {
e.preventDefault();
if (inpitVal.value) {
socket.emit('chat message', inpitVal.value);
inpitVal.value = '';
return false;
}
})
socket.on('chat message', (msg) => {
const message = document.createElement('li');
message.innerHTML = msg;
messagesContainer.appendChild(message);
})
</script>
</body>
</html>
Вообще, я имею ровно такую же проблему, но судя по вашему коду, вы постоянно загружаете свой node сервер на 3000ом порте! Если же говорить про хост heroku, то при запуске, он дает свой порт, который доступен в переменной:
const PORT = process.env.PORT || 3000;
Возможно это и не поможет, но попытка не пытка!
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости