Hola, acabo de empezar a aprender node js hoy y estoy usando express con ejs y tratando de agregar un servidor / chat de socket io, pero parece que no puedo entender por qué no puedo hacer que funcione.
La página se carga pero no se conecta al servidor de socket.
servidor.js:
const express = require('express'); const expressLayouts = require('express-ejs-layouts'); const app = express(); // EJS app.use(expressLayouts); app.use(express.static("public")); app.set('view engine', 'ejs'); // Routes app.use('/', require('./routes/index.js')); app.use('/chat', require('./routes/chat.js')); app.use((req, res, next) => res.redirect('/')); const listener = app.listen(process.env.PORT, () => { console.log('Your app is listening on port ' + listener.address().port) });
enrutadores/chat.js
const express = require('express'); const router = express.Router(); const server = require('http').createServer(); const io = require('socket.io')(server); // Chat Page router.get('/chat', (req, res) => { res.render("chat/chat"); }); io.on('connection', function(socket) { console.log('a user connected'); socket.on('chat message', function(msg) { console.log('message: ' + msg); }); }); module.exports = router;
vistas/chat/chat.ejs:
<form action=""> <input id="m" autocomplete="off" /><button>Send</button> </form> <script src="/socket.io/socket.io.js"></script> <script src="https://code.jquery.com/jquery-1.11.1.js"></script> <script> $(function () { var socket = io(); $('form').submit(function(){ socket.emit('chat message', $('#m').val()); $('#m').val(''); return false; }); }); </script>
Error: Uncaught ReferenceError: io is not defined
No puede obtener /socket-lib/socket.io.js,
debe obtener http://yourwebsite.com:12345/socket.io/socket.io.js .
Básicamente, deberá proporcionar la fuente completa para la dirección del servidor.
El servidor automáticamente hace el resto por ti.
Fuente: https://stackoverflow.com/a/12160485/3010171
además. puede probar ./socket-lib/socket.io.js
con un .
antes de la barra