我希望在特定KeystoneJS模型中有新项目或更新项目后运行一个函数。我怎么做?我会添加一个活动......是否已经举办了活动?我是在模型中还是在其他地方添加它?
答案 0 :(得分:2)
您可以像任何非keystone项目一样使用mongoose中间件。可以使用.schema
访问keystone列表模式,例如
var keystone = require('keystone');
var Types = keystone.Field.Types;
var User = new keystone.List('User');
User.add({
name: { type: Types.Name, required: true, index: true },
email: { type: Types.Email, initial: true, required: true, index: true },
});
//do stuff BEFORE the user document is fully saved to the DB
User.schema.pre('save', function(next){
console.log('SAVING USER:', this);
next();
});
//do stuff AFTER the user document has been saved to the DB
User.schema.post('save', function(user){
console.log('USER WAS SAVED:', user);
});
User.defaultColumns = 'name, email';
User.register();
看一下mongoose middleware,因为有些限制适用,例如在进行批量更新时,中间件不运行,这是设计在mongoose中并且与keystone无关
答案 1 :(得分:0)
KEystoneJS使用猫鼬。
当您添加新模型时,CRUD(更改,替换,更新,删除)会在管理员端自然发生(http:/// keystone
但是对于非管理员方面您需要创建路由,并且在路由视图中您可以使用mongoose API来执行此操作。
keystoneJS中的任何更改都可以通过重新启动服务器来实现(nam start)