我有两难选择,尝试使用pre
中间件向猫鼬模型添加一些预逻辑,并且无法this
像往常一样访问实例。
UserSchema.pre('save', next => {
console.log(this); // logs out empty object {}
let hash = crypto.createHash('sha256');
let password = this.password;
console.log("Hashing password, " + password);
hash.update(password);
this.password = hash.digest('hex');
next();
});
问题:*是否有访问this
实例的方法?
=>
在这种情况下,粗箭头符号()无效。相反,只需使用老式的匿名函数符号:
UserSchema.pre('save', function(next) {
...
});
原因是粗箭头将函数按词法绑定到当前作用域(此处有更多内容,但TL;
DR:粗箭头表示法不是一般的快捷方式表示法,而是专门创建词法绑定的函数),而该函数 应 在Mongoose提供的范围内调用。
问题内容: 要修改猫鼬现有条目中的字段,使用之间有什么区别 还有这个 我问这个问题的原因是因为有人建议我昨天发布一个问题:NodeJS和Mongo- 当多个用户同时发送请求时出现意外行为。该人员建议使用更新而不是保存,但我尚不完全清楚为什么会有所作为。 谢谢! 问题答案: 首先有两个概念。您的应用程序是 客户端 ,Mongodb是 服务器 。 主要区别在于,在客户端代码中已经有一个对象,或者必须先
问题内容: 编辑: 我发现该方法内只返回哈希和盐。我不确定为什么会发生这种情况,但是它表明没有按原样引用模型。 我具有以下架构和以下实例方法: 在这里调用实例方法,然后保存用户: 但是,当我在mongo CLI中查看集合时,没有提及或。 问题答案: 它不起作用的原因是因为我使用的是箭头方法。我必须使其成为正常功能: 原因是箭头功能与常规功能的区别。请查看以下内容以获取更多详细信息: http://
问题内容: 我刚开始和猫鼬一起玩。我有以下代码: 将条目添加到数据库中没有问题,但是检索它们时遇到了问题。我对整个工作原理有些困惑。我的理解如下: 有一些架构,就像oop中的类一样,因此只是数据库中记录的蓝图。该模型是一条记录,可以,也许更多,因为我看到您可以向模型添加方法。好吧…我不太了解如何使用它们。你能给我一个线索,他们到底是什么? 返回主题:发出find命令时,它会调用匿名函数,而docs
问题内容: 我在node.js上运行此代码 1)第一个console.log返回完整文档 2)第二个console.log返回未定义 我不明白为什么。 我需要执行类似 我该如何实现?我想念什么? 问题答案: 我怀疑您要获取的值不在您的中,而是存储在数据库中。 您有两种解决方案。您可以将其添加到您的文档中,然后Mongo可以将其绑定到您收到的对象。这是推荐的方法。 或者,您可以绕过猫鼬,并使用访问存
本文向大家介绍硬件和软件之间的差异。,包括了硬件和软件之间的差异。的使用技巧和注意事项,需要的朋友参考一下 硬件 硬件代表计算机的物理组件,例如其电子部件。例如,CPU,内存,硬盘,显示器,打印机,鼠标等。 软件 软件,代表在计算机系统上执行不同任务的程序。它是由CPU执行的编程代码,可以从键盘,鼠标等输入设备获取指令,并可以在监视器,打印机等输出设备上显示输出。例如MS Word,Google
问题内容: 我有一个非常烦人的问题,我无法使用猫鼬更新任何内容。使用起来确实令人沮丧,并且文档根本没有帮助。 我有这个架构: 这是我要向阵列添加设备的代码: 在这一点上我得到错误: 我没有找到解释为什么发生这种情况的原因。我不得不提到该文档(数据库中几乎只有一个文档)是这个: 问题答案: 使用$ push或其他数组更新运算符将元素添加到数组。有关详细信息,请参阅http://docs.mong