Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

124
Views
express-ws está silenciando errores

Estoy usando express y express-ws en una aplicación de nodo. Sin embargo, express-ws parece estar silenciando los errores, lo que dificulta mucho la depuración de mi código.

He reducido mi código a lo siguiente, que aún reproduce el problema:

 // configure express var express = require('express'); var app = express(); var expressWs = require('express-ws')(app); // set up routes app.get('/', function(req, res) { console.log("GET"); nonExistingFunction(); // Called to demonstrate a traceback is provided. }); app.ws('/', function(ws, req){ console.log("WS"); nonExistingFunction(); // Called to demonstrate this error is silenced. }); // start service app.listen(90);

Cuando OBTENGO desde un navegador, la consola muestra el mensaje de registro 'OBTENER' seguido del rastreo (como se esperaba). Es decir;

 GET ReferenceError: nonExistingFunction is not defined at C:\(project dir)\server.js:11:9 at Layer.handle [as handle_request] (C:\(project dir)\node_modules\express\lib\router\layer.js:95:5) at next (C:\(project dir)\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\(project dir)\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\(project dir)\node_modules\express\lib\router\layer.js:95:5) at C:\(project dir)\node_modules\express\lib\router\index.js:281:22 at Function.process_params (C:\(project dir)\node_modules\express\lib\router\index.js:335:12) at next (C:\(project dir)\node_modules\express\lib\router\index.js:275:10) at expressInit (C:\(project dir)\node_modules\express\lib\middleware\init.js:40:5) at Layer.handle [as handle_request] (C:\(project dir)\node_modules\express\lib\router\layer.js:95:5)

Cuando me conecto a través de Websocket, la consola solo muestra el mensaje de registro 'WS', sin rastreo. Es decir;

 WS

¿Express-ws silencia los errores de forma predeterminada? ¿Hay alguna manera de apagarlo?

about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Tengo una solución.

Express tiene su propio controlador de errores predeterminado que envía el seguimiento a la consola pero permite que la aplicación continúe ejecutándose. Express-ws usa un nido try-catch para hacer lo mismo en wrap-middleware.js .

 try { /* Unpack the `.ws` property and call the actual handler. */ middleware(req.ws, req, next); } catch (err) { /* If an error is thrown, let's send that on to any error handling */ next(err); }

Sin embargo, esto no parece pasarse al controlador de errores predeterminado. Entonces, en su lugar, puede especificar un middleware de controlador de errores para la app . Este debe ser el último middleware de la cadena. El siguiente código es un poco complicado, pero generará seguimientos a la consola independientemente de si el error ocurrió dentro de una función de ruta HTTP o WS.

 // configure express var express = require('express'); var app = express(); var expressWs = require('express-ws')(app); // set up routes app.get('/', function(req, res) { console.log("GET"); nonExistingFunction(); // Called to demonstrate a traceback is provided. }); app.ws('/', function(ws, req){ console.log("WS"); nonExistingFunction(); // Called to demonstrate this error is no longer silenced :) }); // set up error handler function errorHandler (err, req, res, next) { if(req.ws){ console.error("ERROR from WS route - ", err); } else { console.error(err); res.setHeader('Content-Type', 'text/plain'); res.status(500).send(err.stack); } } app.use(errorHandler); // start service app.listen(90);
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!