Skip to content

Server error when throw exception in beforeSave hook #5063

@reallyimeric

Description

@reallyimeric

Issue Description

I tried to abort a save action in beforeSave hook, following instruction, and got http 500 for this request.

Steps to reproduce

Parse.Cloud.beforeSave('Master', async (req) => {
    throw new Error('cya');
});

then update a Master object using the dashboard or js client.

Expected Results

client got an error with message cya.

Actual Outcome

client got body {"code":1,"message":"Internal server error."} with http code 500.
After that client tried 4 more times and then gave up.

Environment Setup

  • Server

    • parse-server version (Be specific! Don't say 'latest'.) : 3.0.0
    • Operating System: linux
    • Hardware: x86_64
    • Localhost or remote server? (AWS, Heroku, Azure, Digital Ocean, etc): localhost
  • Database

    • MongoDB version: mongodb 3.6.5 WiredTiger: 3.0.1: (January 8, 2018)
    • Storage engine: wiredtiger
    • Hardware: the same with server
    • Localhost or remote server? (AWS, mLab, ObjectRocket, Digital Ocean, etc): the same with server

Logs/Trace

error: beforeSave failed for Master for user undefined:
  Input: xxxxxxxx... (truncated)
  Error: {} className=Master, triggerType=beforeSave, , user=undefined
error: Uncaught internal server error. Error: cya
    at _callee$ (/home/xxxxx/src/parse/cloud.js:7:11)
    at tryCatch (/home/xxxxx/node_modules/regenerator-runtime/runtime.js:62:40)
    at Generator.invoke [as _invoke] (/home/xxxxx/node_modules/regenerator-runtime/runtime.js:296:22)
    at Generator.prototype.(anonymous function) [as next] (/home/xxxxx/node_modules/regenerator-runtime/runtime.js:114:21)
    at step (/home/xxxxx/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
    at /home/xxxxx/node_modules/babel-runtime/helpers/asyncToGenerator.js:35:14
    at new Promise (<anonymous>)
    at new F (/home/xxxxx/node_modules/core-js/library/modules/_export.js:35:28)
    at /home/xxxxx/node_modules/babel-runtime/helpers/asyncToGenerator.js:14:12
    at /home/xxxxx/src/parse/cloud.js:5:1
    at Promise.resolve.then (/home/xxxxx/node_modules/parse-server/src/triggers.js:438:23)
    at process._tickCallback (internal/process/next_tick.js:68:7) Error: cya
    at _callee$ (/home/xxxxx/src/parse/cloud.js:7:11)
    at tryCatch (/home/xxxxx/node_modules/regenerator-runtime/runtime.js:62:40)
    at Generator.invoke [as _invoke] (/home/xxxxx/node_modules/regenerator-runtime/runtime.js:296:22)
    at Generator.prototype.(anonymous function) [as next] (/home/xxxxx/node_modules/regenerator-runtime/runtime.js:114:21)
    at step (/home/xxxxx/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
    at /home/xxxxx/node_modules/babel-runtime/helpers/asyncToGenerator.js:35:14
    at new Promise (<anonymous>)
    at new F (/home/xxxxx/node_modules/core-js/library/modules/_export.js:35:28)
    at /home/xxxxx/node_modules/babel-runtime/helpers/asyncToGenerator.js:14:12
    at /home/xxxxx/src/parse/cloud.js:5:1
    at Promise.resolve.then (/home/xxxxx/node_modules/parse-server/src/triggers.js:438:23)
    at process._tickCallback (internal/process/next_tick.js:68:7)
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (/home/xxxxx/node_modules/parse-server/node_modules/express/lib/response.js:767:10)
    at ServerResponse.send (/home/xxxxx/node_modules/parse-server/node_modules/express/lib/response.js:170:12)
    at ServerResponse.json (/home/xxxxx/node_modules/parse-server/node_modules/express/lib/response.js:267:15)
    at errorHandler (/home/xxxxx/src/errorHandler.js:4:24)
    at Layer.handle_error (/home/xxxxx/node_modules/express/lib/router/layer.js:71:5)
    at trim_prefix (/home/xxxxx/node_modules/express/lib/router/index.js:315:13)
    at /home/xxxxx/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/xxxxx/node_modules/express/lib/router/index.js:335:12)
    at next (/home/xxxxx/node_modules/express/lib/router/index.js:275:10)
    at Layer.handle_error (/home/xxxxx/node_modules/express/lib/router/layer.js:67:12)
    at trim_prefix (/home/xxxxx/node_modules/express/lib/router/index.js:315:13)
    at /home/xxxxx/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/xxxxx/node_modules/express/lib/router/index.js:335:12)
    at next (/home/xxxxx/node_modules/express/lib/router/index.js:275:10)
    at Layer.handle_error (/home/xxxxx/node_modules/express/lib/router/layer.js:67:12)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions