Estoy en una Chromebook de la escuela, donde las herramientas para desarrolladores están deshabilitadas. A veces codificaba en node.js, con código del lado del servidor y del lado del cliente. Pero, como las herramientas de desarrollo están deshabilitadas, no puedo verificar los errores en el lado del cliente, ya que solo descubro que a veces simplemente deja de funcionar sin tener idea de lo que está mal. He tenido este problema muchas veces cada vez que codificaba el código del lado del cliente.
¿Cómo podría detectar e identificar el error con solo acceder visualmente a la consola de node.js, así como a express y socket.io?
Por ejemplo,
const express=require("express"); const app = express(); const http = require('http').Server(app); const io = require('socket.io')(http); app.use( '/client', express.static(__dirname + '/client') ); app.get('/', (req, res) => { res.sendFile(__dirname + '/client/index.html'); console.log("sending site"); }); http.listen(3000, () => { console.log('listening on *:3000 (http.listen)'); }); io.on('connection', (socket) => { socket.emit("ERRORNOW",26); });
//"<script src="/socket.io/socket.io.js"></script>" assumed to be in HTML file var socket=io(); socket.on("ERRORNOW",()=>{ if("this doesnt have an ending curlybracket){ //} //this is the error it doesnt have the ending curly bracket, //but it doesn't show in the node.js console //(at least on browser IDEs like repl.it), //and debugging without the developer tools //can be infuriating to say the least });
La pregunta es ¿Cómo puedo identificar un error del lado del cliente de node.js en un IDE basado en web sin herramientas de desarrollador?
Ya tuve este problema hace un tiempo, y debido a la falta de herramientas de desarrollo en las Chromebooks escolares, encontré la solución por mi cuenta, pero pensé que tal vez también debería ponerlo aquí.
Mi solución, tan simple como puede ser, es simplemente usar una instrucción try-catch y enviar el error a la consola de node.js. Me tomó un tiempo darme cuenta de eso...
Por lo tanto, si aún no la tiene, necesitará una función que, cuando se active desde el lado del cliente, pueda registrar algo en la consola, dentro de io.on("connection",()=>{});
cosa, así:
io.on("connection",()=>{ socket.on("log", input=>{ console.log(input); }); });
Por ejemplo, si todo se ejecuta a partir de una sola función que se activa muy rápido (específico, pero relevante para mí, ya que hago juegos web), o simplemente a partir de algo, puede ejecutarlo a partir de una función dentro de una captura de prueba, al igual que:
//"<script src="/socket.io/socket.io.js"></script>" assumed to be in HTML file var socket=io(); try{ socket.on("ERRORNOW",()=>{ try{ if("this doesnt have an ending curlybracket){ //} }catch(error){ socket.emit("log",error); } }); }catch(error){ socket.emit("log",error); }
Así que ahora, con esta solución simple, puede dejar de comentar el 90% de su código para encontrar ese error que hace que deje de funcionar mientras lo rompe aún más al comentar accidentalmente partes que ayudan a que funcione en primer lugar.