javascript - 使用 Mongoose 设置 Redis 时了解 JS 代码

标签 javascript node.js mongoose redis

我试图了解 NodeJS 中使用 redis 的缓存。

在讲座中,讲师告诉我们,设置缓存的最佳位置是在 mongoose 中的 exec 函数之前。

所以为了做到这一点,他做了

const mongoose = require('mongoose')

const exec = mongoose.Query.prototype.exec;
//Redis logic
mongoose.Query.prototype.exec = function () {
 console.log("i am here") 
 return exec.apply(this, argument);
}

第一:mongoose.Query.prototype.exec; 会被分类为什么?值类型还是引用类型?因为如果它是引用类型,那么当我们更改 mongoose.Query.prototype.exec = function 时,它的值不应该也会更改吗?

第二我无法理解这里的这一行return exec.apply(this, argument);有人可以在stretch中解释这一点,即apply中的this指向哪里?他正在传递参数 (this, argument); 这个参数从哪里来?

有人可以帮我回答上述两个问题吗?

最佳答案

What will classify mongoose.Query.prototype.exec; as? value type or reference type? Because if it is a reference type then when we change mongoose.Query.prototype.exec = function

exec 是引用类型,但它被赋予另一个引用变量 mongoose.Query.prototype.exec 的值。你可以这样想:mongoose.Query.prototype.exec本身指向内存中的一个对象(一个Function对象),现在在赋值之后,exec也指向同一个对象 - 换句话说,在赋值期间,对象的内存地址从 mongoose.Query.prototype.exec 复制(按值)到 exec 。因此,变量 mongoose.Query.prototype.exec 本身的值(即存储在其中的内存地址)可以更改,而不会影响其他变量 exec 。它们最终都会指向两个不同的对象。

Can someone explain this in stretch i.e this in apply points to where?

在本例中,它将是调用此函数的对象,即 Query 实例。

and he is passing argument (this, argument); where does that Argument come from?

除非您错过了在问题中复制粘贴的某些代码,否则argument 似乎是一个拼写错误。他可能指的是内置对象arguments,它可以在每个函数内部访问,并且由传递给函数的参数组成。这是reference .

在较高层面上,讲师试图做的是重写函数 Query.exec() 的内置行为,以添加一些他自己的自定义处理。他首先创建原始函数的“备份”,然后将 Query.exec 指向他的自定义函数,该函数添加自定义处理(日志语句),然后将控制权移交给备份,即继续执行内置行为。此后,任何在 Query 实例上调用 exec() 的人都将看到重写的功能 - 首先是日志语句,然后是 exec()

的内置行为

关于javascript - 使用 Mongoose 设置 Redis 时了解 JS 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53438970/

相关文章:

javascript - Sequelize "where"指的是包含模型列

javascript - jquery ui 选项卡与 Jade

node.js - 如何使用 Node.js 在 MongoDB 中存储大量数字

javascript - 为什么会有双console.log?

javascript - 变量没有传递到函数中?

node.js - 为什么 Mongo 将我的日期存储为字符串?

node.js - 聚合返回空数组 - Mongoose

javascript - 对数组的 mongoose.model 进行索引返回未定义

javascript - mvc 5 中图像未成功上传

javascript - 如何使用本地存储/内存来存储我的文本 RPG 的数据?