Skip to content

Server error when throw exception in beforeSave hook #5063

Closed
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions