当前位置: 首页 > 面试题库 >

猫鼬之前/之后的中间件软件无法使用ES6访问[this]实例

訾安邦
2023-03-14
问题内容

我有两难选择,尝试使用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

  • 问题内容: 我正在用ES6(使用BabelJS)编写一个简单的组件,并且功能无法正常工作。 典型的错误包括类似 无法读取未定义的属性“ setState” 要么 this.setState不是一个函数 你知道为什么吗?这是代码: 问题答案: 在作为prop 传递之前,需要先通过绑定到组件实例,否则函数主体中的变量将不会引用组件实例,而是指向。参见Function :: bind 。 当使用而不是E