如何替换Model's的save()函数
Mongoose how to replace a Model's save() function
我已经设置了一个KeystoneJS项目,它允许你为你的模型获得一个开箱即用的管理UI。
KeystoneJS只使用一个主数据库,在主数据库中定义模型,然后每个模型在主数据库中获得自己的集合。
问题是,我有一个单独的用户数据库和一个单独的内容数据库。我正在寻找"劫持"Keystone模型,这样我就可以从我的其他数据库(目前使用猫鼬胶项目)插入模型。我有50%在那里。我让它通过替换Keystone模型的.find()
和.findOne()
函数来读取数据,像这样
var KeystoneUser = new keystone.List('User');
KeystoneUser.add({ /* clone all fields in external model */ });
KeystoneUser.register();
var external = require("mongoose-glue");
var ExternalUser = external.model("ExternalUser")
KeystoneUser.model.find = ExternalUser.find.bind(ExternalUser)
KeystoneUser.model.findOne = ExternalUser.findOne.bind(ExternalUser)
使用上面的Keystone Admin UI可以很好地列出和浏览外部数据库中的数据。
但问题是当它涉及到保存。
如何用类似的方式替换保存函数?此外,由于上述原因,所有pre/post钩子在keystone和外部模型上都停止工作。
解决方法:
KeystoneUser.model.collection = ExternalUser.collection;
让钩子工作,然后我写了我自己的保存/更新钩子
KeystoneUser.schema.pre("save", function(next) {
// Trick to remove everything we don't need
var data = JSON.parse(JSON.stringify(this));
if (typeof this.__v === "undefined") {
new ExternalUser(data).save();
} else {
delete data._id;
ExternalUser.findByIdAndUpdate(this._id, data).exec();
}
next();
});
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- Save不是ExpressJS中的函数
- 跳过Save函数后进行分析
- Mongoose .save()没有进入.save()函数
- Mongoose save不是使用schema的函数
- Java脚本函数,直到save事件执行完成
- 如何替换Model's的save()函数
- Object.save()不是函数错误
- .$save不是一个函数(AngularJS)
- .save不是一个函数