Skip to content

Commit c6c9c97

Browse files
JeremyPleaseflovilmart
authored andcommitted
Allow custom error codes with response.error from Cloud Code functions and before/after hooks (#1955)
1 parent 103839c commit c6c9c97

File tree

4 files changed

+59
-4
lines changed

4 files changed

+59
-4
lines changed

spec/CloudCode.spec.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,23 @@ describe('Cloud Code', () => {
6464
})
6565
});
6666

67+
it('beforeSave rejection with custom error code', function(done) {
68+
Parse.Cloud.beforeSave('BeforeSaveFailWithErrorCode', function (req, res) {
69+
res.error(999, 'Nope');
70+
});
71+
72+
var obj = new Parse.Object('BeforeSaveFailWithErrorCode');
73+
obj.set('foo', 'bar');
74+
obj.save().then(function() {
75+
fail('Should not have been able to save BeforeSaveFailWithErrorCode class.');
76+
done();
77+
}, function(error) {
78+
expect(error.code).toEqual(999);
79+
expect(error.message).toEqual('Nope');
80+
done();
81+
});
82+
});
83+
6784
it('basic beforeSave rejection via promise', function(done) {
6885
Parse.Cloud.beforeSave('BeforeSaveFailWithPromise', function (req, res) {
6986
var query = new Parse.Query('Yolo');

spec/ParseAPI.spec.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,36 @@ describe('miscellaneous', function() {
724724
});
725725
});
726726

727+
it('test cloud function error handling with custom error code', (done) => {
728+
// Register a function which will fail
729+
Parse.Cloud.define('willFail', (req, res) => {
730+
res.error(999, 'noway');
731+
});
732+
Parse.Cloud.run('willFail').then((s) => {
733+
fail('Should not have succeeded.');
734+
done();
735+
}, (e) => {
736+
expect(e.code).toEqual(999);
737+
expect(e.message).toEqual('noway');
738+
done();
739+
});
740+
});
741+
742+
it('test cloud function error handling with standard error code', (done) => {
743+
// Register a function which will fail
744+
Parse.Cloud.define('willFail', (req, res) => {
745+
res.error('noway');
746+
});
747+
Parse.Cloud.run('willFail').then((s) => {
748+
fail('Should not have succeeded.');
749+
done();
750+
}, (e) => {
751+
expect(e.code).toEqual(Parse.Error.SCRIPT_FAILED);
752+
expect(e.message).toEqual('noway');
753+
done();
754+
});
755+
});
756+
727757
it('test beforeSave/afterSave get installationId', function(done) {
728758
let triggerTime = 0;
729759
Parse.Cloud.beforeSave('GameScore', function(req, res) {

src/Routers/FunctionsRouter.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ export class FunctionsRouter extends PromiseRouter {
2121
}
2222
});
2323
},
24-
error: function(error) {
25-
reject(new Parse.Error(Parse.Error.SCRIPT_FAILED, error));
24+
error: function(code, message) {
25+
if (!message) {
26+
message = code;
27+
code = Parse.Error.SCRIPT_FAILED;
28+
}
29+
reject(new Parse.Error(code, message));
2630
}
2731
}
2832
}

src/triggers.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,12 @@ export function getResponseObject(request, resolve, reject) {
141141
}
142142
return resolve(response);
143143
},
144-
error: function(error) {
145-
var scriptError = new Parse.Error(Parse.Error.SCRIPT_FAILED, error);
144+
error: function(code, message) {
145+
if (!message) {
146+
message = code;
147+
code = Parse.Error.SCRIPT_FAILED;
148+
}
149+
var scriptError = new Parse.Error(code, message);
146150
return reject(scriptError);
147151
}
148152
}

0 commit comments

Comments
 (0)