diff --git a/src/node/hooks/express/apicalls.js b/src/node/hooks/express/apicalls.js index b72ed11e5..45e38ce45 100644 --- a/src/node/hooks/express/apicalls.js +++ b/src/node/hooks/express/apicalls.js @@ -14,18 +14,19 @@ exports.expressCreateServer = (hookName, args, cb) => { }); }); + const parseJserrorForm = async (req) => await new Promise((resolve, reject) => { + const form = new formidable.IncomingForm(); + form.on('error', (err) => reject(err)); + form.parse(req, (err, fields) => err != null ? reject(err) : resolve(fields.errorInfo)); + }); + // The Etherpad client side sends information about client side javscript errors - args.app.post('/jserror', (req, res) => { - new formidable.IncomingForm().parse(req, (err, fields, files) => { - let data; - try { - data = JSON.parse(fields.errorInfo); - } catch (e) { - return res.end(); - } + args.app.post('/jserror', (req, res, next) => { + (async () => { + const data = JSON.parse(await parseJserrorForm(req)); clientLogger.warn(`${data.msg} --`, data); res.end('OK'); - }); + })().catch((err) => next(err || new Error(err))); }); // Provide a possibility to query the latest available API version