Это мое приложение NodeJS. Я закомментировал некоторые части, чтобы сузить проблему.

const functions = require('firebase-functions'); const express = require('express'); // const path = require('path'); // const bodyParser = require('body-parser'); const app = express(); // const gameAPI = require('./routes/apiv1'); const startTime = Date.now(); Error.stackTraceLimit = Infinity; console.log("Server Started"); // app.use('/node_modules',express.static(path.join(__dirname, 'node_modules'))); // app.use(bodyParser.json()); // app.use(bodyParser.urlencoded({ extended: true })); app.use((err, req, res, next) ={amp}gt; { res.status(500).send(); }); // app.use('/v1.0', gameAPI); app.get('/', (req, res)={amp}gt;{ res.send(`App started ${(Date.now() - startTime)/1000}s ago`); }); exports.app = functions.https.onRequest(app); 

когда я отправляю неверный JSON

 { "ign":"XX" "allies": "5" } 

Сбой приложения.

 [11:21:31]{}firebase-test:sulochana$ firebase serve --only functions,hosting ✔ functions: Using node@8 from host. ✔ functions: Emulator started at http://localhost:5001 i functions: Watching "/home/sulochana/Documents/firebase-test/functions" for Cloud Functions... i hosting: Serving hosting files from: public ✔ hosting: Local server: http://localhost:5000 {amp}gt; Server Started ✔ functions[app]: http function initialized (http://localhost:5001/scrim-engine/us-central1/app). [hosting] Rewriting /v1.0/dota/queue to http://localhost:5001/scrim-engine/us-central1/app for local Function app {amp}gt; Server Started i functions: Beginning execution of "app" {amp}gt; SyntaxError: Unexpected string in JSON at position 15 {amp}gt; at JSON.parse ({amp}lt;anonymous{amp}gt;) {amp}gt; at parse (/usr/lib/node_modules/firebase-tools/node_modules/body-parser/lib/types/json.js:89:19) {amp}gt; at /usr/lib/node_modules/firebase-tools/node_modules/body-parser/lib/read.js:121:18 {amp}gt; at invokeCallback (/usr/lib/node_modules/firebase-tools/node_modules/raw-body/index.js:224:16) {amp}gt; at done (/usr/lib/node_modules/firebase-tools/node_modules/raw-body/index.js:213:7) {amp}gt; at IncomingMessage.onEnd (/usr/lib/node_modules/firebase-tools/node_modules/raw-body/index.js:273:7) {amp}gt; at emitNone (events.js:111:20) {amp}gt; at IncomingMessage.emit (events.js:208:7) {amp}gt; at endReadableNT (_stream_readable.js:1064:12) {amp}gt; at _combinedTickCallback (internal/process/next_tick.js:139:11) 

Как справиться с этим исключением. Это позволит внешним пользователям аварийно завершить работу приложения.

Вы должны определить, где JSON.parse() метод JSON.parse() , а затем перед ним проверить, является ли JSON действительным, прежде чем пытаться использовать проанализированный вывод. Например:

 const isValidJson = jsonString ={amp}gt; { try { JSON.parse(jsonString) return true } catch(err) { return false } } if (isValidJson(jsonString)) JSON.parse(jsonString) 

Наиболее вероятный виновник того, где происходит этот анализ, кажется, в вашем игровом API, так как он, кажется, обрабатывает маршруты вашего приложения.

Как разработчик, вы должны проверить входные данные перед процессом.

Проверить JSON

  try { JSON.parse(str); } catch (e) { return false; } 

Перезагрузите сервер при непредвиденных сбоях

А также, вы можете использовать некоторые пакеты, такие как forever , чтобы автоматически перезагружать сервер в случае его сбоя.