Merge pull request #1272 from strongloop/feature/after-remote-error-hook
Model.afterRemoteError hook
This commit is contained in:
commit
b61fae58f6
|
@ -626,7 +626,6 @@ module.exports = function(User) {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
UserModel.on('attached', function() {
|
|
||||||
UserModel.afterRemote('confirm', function(ctx, inst, next) {
|
UserModel.afterRemote('confirm', function(ctx, inst, next) {
|
||||||
if (ctx.args.redirect !== undefined) {
|
if (ctx.args.redirect !== undefined) {
|
||||||
if (!ctx.res) {
|
if (!ctx.res) {
|
||||||
|
@ -637,7 +636,6 @@ module.exports = function(User) {
|
||||||
}
|
}
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
// default models
|
// default models
|
||||||
assert(loopback.Email, 'Email model must be defined before User model');
|
assert(loopback.Email, 'Email model must be defined before User model');
|
||||||
|
|
47
lib/model.js
47
lib/model.js
|
@ -187,36 +187,40 @@ module.exports = function(registry) {
|
||||||
|
|
||||||
// before remote hook
|
// before remote hook
|
||||||
ModelCtor.beforeRemote = function(name, fn) {
|
ModelCtor.beforeRemote = function(name, fn) {
|
||||||
var self = this;
|
var className = this.modelName;
|
||||||
if (this.app) {
|
this._runWhenAttachedToApp(function(app) {
|
||||||
var remotes = this.app.remotes();
|
var remotes = app.remotes();
|
||||||
var className = self.modelName;
|
|
||||||
remotes.before(className + '.' + name, function(ctx, next) {
|
remotes.before(className + '.' + name, function(ctx, next) {
|
||||||
fn(ctx, ctx.result, next);
|
fn(ctx, ctx.result, next);
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
var args = arguments;
|
|
||||||
this.once('attached', function() {
|
|
||||||
self.beforeRemote.apply(self, args);
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// after remote hook
|
// after remote hook
|
||||||
ModelCtor.afterRemote = function(name, fn) {
|
ModelCtor.afterRemote = function(name, fn) {
|
||||||
var self = this;
|
var className = this.modelName;
|
||||||
if (this.app) {
|
this._runWhenAttachedToApp(function(app) {
|
||||||
var remotes = this.app.remotes();
|
var remotes = app.remotes();
|
||||||
var className = self.modelName;
|
|
||||||
remotes.after(className + '.' + name, function(ctx, next) {
|
remotes.after(className + '.' + name, function(ctx, next) {
|
||||||
fn(ctx, ctx.result, next);
|
fn(ctx, ctx.result, next);
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
var args = arguments;
|
|
||||||
this.once('attached', function() {
|
|
||||||
self.afterRemote.apply(self, args);
|
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
self.once('attached', function() {
|
||||||
|
fn(self.app);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// resolve relation functions
|
// resolve relation functions
|
||||||
|
@ -383,15 +387,10 @@ module.exports = function(registry) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Model.getApp = function(callback) {
|
Model.getApp = function(callback) {
|
||||||
var Model = this;
|
this._runWhenAttachedToApp(function(app) {
|
||||||
if (this.app) {
|
|
||||||
callback(null, this.app);
|
|
||||||
} else {
|
|
||||||
Model.once('attached', function() {
|
|
||||||
assert(Model.app);
|
assert(Model.app);
|
||||||
callback(null, Model.app);
|
callback(null, Model.app);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
"nodemailer-stub-transport": "^0.1.5",
|
"nodemailer-stub-transport": "^0.1.5",
|
||||||
"serve-favicon": "^2.2.0",
|
"serve-favicon": "^2.2.0",
|
||||||
"stable": "^0.1.5",
|
"stable": "^0.1.5",
|
||||||
"strong-remoting": "^2.13.2",
|
"strong-remoting": "^2.15.0",
|
||||||
"uid2": "0.0.3",
|
"uid2": "0.0.3",
|
||||||
"underscore.string": "^3.0.3"
|
"underscore.string": "^3.0.3"
|
||||||
},
|
},
|
||||||
|
|
|
@ -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('Remote Method invoking context', function() {
|
||||||
describe('ctx.req', function() {
|
describe('ctx.req', function() {
|
||||||
it('The express ServerRequest object', function(done) {
|
it('The express ServerRequest object', function(done) {
|
||||||
|
|
Loading…
Reference in New Issue