diff --git a/lib/model.js b/lib/model.js index cc9146a8..1793eea3 100644 --- a/lib/model.js +++ b/lib/model.js @@ -200,6 +200,14 @@ module.exports = function(registry) { }); }; + ModelCtor.afterRemoteError = function(name, fn) { + var className = this.modelName; + this._runWhenAttachedToApp(function(app) { + var remotes = app.remotes(); + remotes.afterError(className + '.' + name, fn); + }); + }; + ModelCtor._runWhenAttachedToApp = function(fn) { if (this.app) return fn(this.app); var self = this; diff --git a/package.json b/package.json index beae727c..3332b280 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "nodemailer-stub-transport": "^0.1.5", "serve-favicon": "^2.2.0", "stable": "^0.1.5", - "strong-remoting": "^2.13.2", + "strong-remoting": "^2.15.0", "uid2": "0.0.3", "underscore.string": "^3.0.3" }, diff --git a/test/model.test.js b/test/model.test.js index db05e13e..29e0fef8 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -219,6 +219,24 @@ describe.onServer('Remote Methods', function() { }); }); + describe('Model.afterRemoteError(name, fn)', function() { + it('runs the function when method fails', function(done) { + var actualError = 'hook not called'; + User.afterRemoteError('login', function(ctx, next) { + actualError = ctx.error; + next(); + }); + + request(app).get('/users/sign-in?username=bob&password=123') + .end(function(err, res) { + if (err) return done(err); + expect(actualError) + .to.have.property('message', 'bad username and password!'); + done(); + }); + }); + }); + describe('Remote Method invoking context', function() { describe('ctx.req', function() { it('The express ServerRequest object', function(done) {