Actualmente estoy trabajando en una página web de chat en tiempo real. Originalmente estaba pensando en usar PHP, pero estoy probando socket.io para el backend.
Tengo un problema en el que la consola del navegador registra Uncaught ReferenceError: io is not defined . He buscado esto muchas veces en este sitio, así como en otros, y la mayoría de las respuestas dicen que se asegure de que su etiqueta <script> tenga el src apuntando a http://localhost:3000/socket.io/socket.io.js y no solo /socket.io/socket.io.js . Ya tengo esto en mi código HTML. Aquí hay un fragmento del código:
índice.html
<!DOCTYPE html> <html lang="en-us"> <head> <title>Chat</title> <meta charset="utf-8" /> <link rel="stylesheet" href="style.css" type="text/css" /> <script type="text/javascript" src="../libs/jquery.js"></script> <script src="../libs/fontawesome.js" crossorigin="anonymous"></script> <script defer src="http://localhost:3000/socket.io/socket.io.js"></script> </head> <body> <!-- My code here --> <script type="text/javascript" src="script.js"></script> </body> </html>guión.js
const socket = io("http://localhost:3000"); socket.on("chat-message", (data) => { console.log(data); });servidor.js
const io = require("socket.io")(3000); io.on("connection", (socket) => { socket.emit("chat-message", "Hello World!"); }); Básicamente, todo lo que debería hacer ahora es que cuando un usuario se conecte a la página, el servidor envíe una solicitud al cliente con los data de Hello World! . Luego, el cliente simplemente console.log() estos datos.
Recibo el Error de Uncaught ReferenceError: io is not defined en la consola del NAVEGADOR, y dice que el problema está en script.js en la primera línea: const socket = io("http://localhost:3000"); .
Gracias de antemano. Cualquier y toda ayuda es apreciada.
La etiqueta defer <script> tiene un atributo diferido, lo que significa que se ejecutará después de que se haya analizado el documento. Esto significa que se ejecuta después de script.js, que no se difiere. Para solucionar esto, simplemente agregue un atributo diferido a la etiqueta defer <script> , ya que los scripts diferidos se ejecutan en el orden en que están definidos.