This is my NodeJS application. I've commented out some parts to narrow down the issue.
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) => {
res.status(500).send();
});
// app.use('/v1.0', gameAPI);
app.get('/', (req, res)=>{
res.send(`App started ${(Date.now() - startTime)/1000}s ago`);
});
exports.app = functions.https.onRequest(app);
when I send an invalid JSON
{
"ign":"XX"
"allies": "5"
}
The application crash.
[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
> 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
> Server Started
i functions: Beginning execution of "app"
> SyntaxError: Unexpected string in JSON at position 15
> at JSON.parse (<anonymous>)
> at parse (/usr/lib/node_modules/firebase-tools/node_modules/body-parser/lib/types/json.js:89:19)
> at /usr/lib/node_modules/firebase-tools/node_modules/body-parser/lib/read.js:121:18
> at invokeCallback (/usr/lib/node_modules/firebase-tools/node_modules/raw-body/index.js:224:16)
> at done (/usr/lib/node_modules/firebase-tools/node_modules/raw-body/index.js:213:7)
> at IncomingMessage.onEnd (/usr/lib/node_modules/firebase-tools/node_modules/raw-body/index.js:273:7)
> at emitNone (events.js:111:20)
> at IncomingMessage.emit (events.js:208:7)
> at endReadableNT (_stream_readable.js:1064:12)
> at _combinedTickCallback (internal/process/next_tick.js:139:11)
How to handle this exception. This will allow external users to crash the application
You have to determine where the JSON.parse() method is being invoked and then precede it with a test for whether the JSON is valid before trying to use the parsed output. For example:
const isValidJson = jsonString => {
try {
JSON.parse(jsonString)
return true
} catch(err) {
return false
}
}
if (isValidJson(jsonString)) JSON.parse(jsonString)
The likeliest culprit for where this parsing is happening appears to be in your game API, since it seems to be handling your app's routes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With