Evite que el servidor se bloquee.
Estoy probando una API con Postman donde espero un número con o sin decimales.
Pero pasa que a la hora de hacer la prueba si pongo un cartel como este en Postman: " ) " el servidor se cuelga automaticamente y parece que no llega a mi validador.
Cartero:
{ "concept": "Text", "incomeAmount": 1)0000, "expenseAmount": 89, "description":"Text" }Respuesta fallida:
SyntaxError: Token inesperado) en JSON en la posición 73 en JSON.parse () en parse (C:\project\node_modules\body-parser\lib\types\json.js:89:19) en C:\project\node_modules\ body-parser\lib\read.js:121:18 en invocarCallback (C:\project\node_modules\raw-body\index.js:224:16) en done (C:\project\node_modules\raw-body\index .js:213:7) en IncomingMessage.onEnd (C:\project\node_modules\raw-body\index.js:273:7) en IncomingMessage.emit (nodo:eventos:402:35) en IncomingMessage.emit (nodo :dominio:475:12) en endReadableNT (nodo:interno/streams/readable:1343:12) en processTicksAndRejections (nodo:interno/proceso/task_queues:83:21)
Estoy usando validador express como este:
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 );Y en el controlador uso Regex para comprobar que es un número positivo sin símbolos, pero al parecer no llega ni la petición ni la ruta.
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' } ); }¡Gracias por tu ayuda!
Esto se espera. Está enviando JSON ilegal, por lo que su middleware de análisis de JSON obtiene una excepción. Para capturar/manejar este error, debe instalar un middleware personalizado que detecte el error en el middleware o capturar el error del analizador JSON existente en el controlador de errores Express instalando su propio controlador de errores Express .
Además, si está utilizando el middleware express.json() , tiene una opción de devolución de llamada de verify que puede verificar previamente el JSON si lo desea, pero, francamente, probablemente sea más fácil tener un controlador de errores Express y obtener el error. allá.
Con tanta información, solo puedo suponer que está utilizando algún tipo de middleware json que analiza los datos entrantes.
Desafortunadamente, los datos que envió a través del cartero no están en un formato json válido. Irónicamente, solo se aceptan números válidos como valor sin necesidad de comillas (excluyendo matriz y objeto).
Una solución tal vez sea enviar los datos como texto puro a su API y luego ejecutar su validación antes de convertirlos en un número.
Puede verificar el formato json usted mismo aquí: https://jsonformatter.curiousconcept.com/