Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

326
Vistas
Server crashes when testing app expecting a number. Express, NodeJS

Prevent server from crashing.

I am testing an API with Postman where I am expecting a number with or without decimal places.

But it happens that at the time of testing if I enter a sign like this in Postman: " ) " the server crashes automatically and it seems that it does not reach my validator.

Postman:

{
        "concept": "Text",
        "incomeAmount": 1)0000,
        "expenseAmount": 89,
        "description":"Text"
}

Failed response:

SyntaxError: Unexpected token ) in JSON at position 73 at JSON.parse () at parse (C:\project\node_modules\body-parser\lib\types\json.js:89:19) at C:\project\node_modules\body-parser\lib\read.js:121:18 at invokeCallback (C:\project\node_modules\raw-body\index.js:224:16) at done (C:\project\node_modules\raw-body\index.js:213:7) at IncomingMessage.onEnd (C:\project\node_modules\raw-body\index.js:273:7) at IncomingMessage.emit (node:events:402:35) at IncomingMessage.emit (node:domain:475:12) at endReadableNT (node:internal/streams/readable:1343:12) at processTicksAndRejections (node:internal/process/task_queues:83:21)

I am using express validator like this:

router.post('/new-income',
    [
        check('incomeAmount', 'El Monto del Ingreso debe ser Númerico').isNumeric().not().isEmpty(),
        check('expenseAmount', 'El Monto del Egreso debe ser Númerico').isNumeric().optional({ checkFalsy: true }),

    ],
    validation,
    newItem
);

And in the controller, I use Regex to verify that it is a positive number without symbols, but apparently neither the request nor the route arrives.

const regAmount = new RegExp('^[+]?([1-9][0-9]*(?:[\.][0-9]*)?|0*\.0*[1-9][0-9]*)(?:[eE][+-][0-9]+)?$');


        if (!regAmount.test(incomeAmount)) {
            return res.json ( {
                'msg': 'Only positive numbers without signs are allowed'
            } ); 
        }

Thanks for your help!

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

This is expected. You're sending illegal JSON so your JSON parsing middleware gets an exception. To catch/handle this error, you need to either install custom middleware that catches the error in the middleware or catch the error from the existing JSON parser in the Express error handler by installing your own Express error handler.

Also, if you're using the express.json() middleware, it has a verify callback option that you can pre-check the JSON if you want, but frankly, it's probably easier to just have an Express error handler and get the error there.

about 4 years ago · Juan Pablo Isaza Denunciar

0

With this much information I can only assume that you are using some kind of json middleware that parse the incoming data.

Unfortunately, the data you sent via postman is not in a valid json format. Ironically enough, only valid number are accepted as value without the need of quotation mark (excluding array and object).

A solution maybe to send the data as pure text to your api and then run in through your validation before converting it into a number.

You can verify the json format yourself here: https://jsonformatter.curiousconcept.com/

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda