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

328
Views
Express: el nuevo Error () no funciona fuera de server.js/index.js

Creé una excepción personalizada simple basada en este enlace de la siguiente manera:

 function userErr(message) { logger.info("reach user error function") const error = new Error(message); error.type = "userErr"; return error; } function failureErr(message) { logger.info("reach failure error function") const error = new Error(message); error.type = "failureErr"; return error; }

El comportamiento esperado es Express arrojará este error al middleware del controlador de errores personalizado al final del archivo server.js:

 app.use((error, req, res, next) => { console.log("Error Handling Middleware: " + error.message); if (error.type === "userErr") { res.status(400).json({ status: "error", statusCode: "400", message: error.message }); } else if (error.type === "failureErr") { res.status(500).json({ status: "fail", statusCode: "500", message: error.message }); } else { res.status(500).json({ status: "error", statusCode: "500", message: error.message }); } }); app.listen(8080, () => { console.log("listening on 8080..."); }); //the server object listens on port 8080

Cuando coloco estas funciones sobre las rutas (app.get, app.post, etc...) en el archivo server.js (esto debería ser index.js para la mayoría de las personas), funciona bien. Pero cuando empiezo a eliminar estas rutas y las coloco en un archivo de ruta en la carpeta de rutas, el tráfico llega a la ruta correctamente, pero cada vez que ocurre un error y ejecuta la función anterior, JavaScript arroja un error en la segunda línea, cual es:

 const error = new Error(message);

por ejemplo:

 const error = new Error(message); ^ Error: [object Object] at new failureErr (file:///.../src/server.js:89:17) at file:///.../src/routes/testRoutes.js:104:21 { type: 'failureErr'

¡Qué raro! He intentado colocar estas funciones en un archivo separado e importarlas al archivo de ruta, pero aún muestra el mismo error.

Imité la carpeta en la caja de códigos (no pude hacer que se ejecutara) para que pueda comprender el contexto. El index.js por sí solo es el que funciona, mientras que el index2.js con la carpeta de enrutadores es el que falló.

Agradezco cualquier comentario sobre las preguntas o cualquier idea sobre dónde hice algo mal.

about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

El código que muestra en su sandbox está haciendo esto throw new userError("It's an user error"); , pero userError() no está configurado correctamente como constructor y, por lo tanto, no se puede llamar con new . Este es el código en su sandbox:

 app.get("/api/v1/test", (req, res, next) => { try { const userErr = req.headers.userErr; console.log(userErr); if (userErr === "true") { throw new userError("It's an user error"); } else { throw new failureError("It's an failure error"); } } catch (e) { next(e); } });

El código que muestra no ha convertido ni userError() ni failureError() en clases o constructores. Son meras funciones. Por lo tanto, no se pueden llamar con new .

Si desea convertirlos en clases, haga algo como esto:

 class userError extends Error { constructor(message) { super(message); console.log("reach user error function"); this.type = "userErr"; } }

Tenga en cuenta que esta es la forma más moderna de hacer esto que la que se muestra en el artículo al que hace referencia (que aparentemente es antiguo).

O simplemente puede usar lo que tiene como funciones:

 app.get("/api/v1/test", (req, res, next) => { try { const userErr = req.headers.userErr; console.log(userErr); if (userErr === "true") { next(userError("It's an user error")); return; } else { next(failureError("It's an failure error")); return; } res.send("ok"); } catch (e) { next(e); } });
about 4 years ago · Santiago Gelvez 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!