NodeJS, express: проверка запроса полезных данных json на сервере для проверки JSON не поврежден

Я пытаюсь разработать сервис для обработки некоторых данных JSON, отправляемых клиентом в почтовом запросе. Я разработал сервис и функциональность, и он работает хорошо, если данные JSON в POST запросе свободны от ошибок, но если данные json в запросе повреждены (отсутствует скобка или запятая), то сервис ломается. Я новичок с node и попытался обработки ошибок с try catch, но это, кажется, не работает. Может кто-то, пожалуйста, взглянуть на этот код и ошибку и помочь мне выяснить, как правильно обрабатывать ошибки в узле.js

сервер.js

var express = require('express');
var bodyParser = require('body-parser');

var app = express();
app.use(bodyParser.json());

app.post('/', function(request, response){

response.set("Content-Type", "application/json");
var jsonObj = request.body;
var responseJson = {};
if(jsonObj.hasOwnProperty("payload"))
{
var keyResponse = "response";
responseJson[keyResponse] = "Here is processed data";
response.status(200);
}
else
{
    response.status(400);
    var keyResponse = "error";
    responseJson[keyResponse] = "JSON parsing failed";
}
response.send(responseJson);
})
var port = process.env.PORT || 3000;
app.listen(port);
console.log("Sever is up and listening on port "+port);

Ошибки:

SyntaxError: Unexpected token p in JSON at position 6
at JSON.parse (<anonymous>)
at parse (/Users/Vov/Desktop/NineEntertainmentService/nine-service/node_modules/body-parser/lib/types/json.js:88:17)
at /Users/Vov/Desktop/NineEntertainmentService/nine-service/node_modules/body-parser/lib/read.js:116:18
at invokeCallback (/Users/Vov/Desktop/NineEntertainmentService/nine-service/node_modules/raw-body/index.js:262:16)
at done (/Users/Vov/Desktop/NineEntertainmentService/nine-service/node_modules/raw-body/index.js:251:7)
at IncomingMessage.onEnd (/Users/Vov/Desktop/NineEntertainmentService/nine-service/node_modules/raw-body/index.js:307:7)
at emitNone (events.js:86:13)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)

Это ошибка при подаче запроса с данными JSON отсутствует двоеточие(:)

Любая помощь ценится! Спасибо

1 ответ

  1. В ответ на эту ошибку можно добавить промежуточное ПО обработки ошибок.

    Трудно определить, что ошибка является результатом плохой JSON

    app.use(function(err, req, res, next) {
      if (err instanceof SyntaxError && err.status === 400 && 'body' in err) {
        // Handle the error here
        console.error('Bad JSON');
        res.status(500).send('JSON parse error');
      }
      
      // Pass the error to the next middleware if it wasn't a JSON parse error
      next(err):
    });