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

猫鼬实例方法“ this”未引用模型

凌钊
2023-03-14
问题内容

编辑:
我发现console.log(this)setPassword方法内只返回哈希和盐。我不确定为什么会发生这种情况,但是它表明this没有按原样引用模型。

我具有以下架构和以下实例方法:

let userSchema = new mongoose.Schema({
  username: {type: String, required: true},
  email: {type: String, required: true, index: {unique: true}},
  joinDate: {type: Date, default: Date.now},
  clips: [clipSchema],
  hash: {type: String},
  salt: {type: String}
})

userSchema.methods.setPassword = (password) => {
  this.salt = crypto.randomBytes(32).toString('hex')
  this.hash = crypto.pbkdf2Sync(password, this.salt, 100000, 512, 'sha512').toString('hex')
}

在这里调用实例方法,然后保存用户:

let user = new User()

user.username = req.body.username
user.email = req.body.email
user.setPassword(req.body.password)

user.save((err) => {
  if (err) {
    sendJsonResponse(res, 404, err)
  } else {
    let token = user.generateJwt()
    sendJsonResponse(res, 200, { 'token': token })
  }
})

但是,当我users在mongo CLI中查看集合时,没有提及hashsalt

{
 "_id" : ObjectId("576338b363bb7df7024c044b"),
 "email" : "boss@potato.com",
 "username" : "Bob",
 "clips" : [ ],
 "joinDate" : ISODate("2016-06-16T23:39:31.825Z"),
 "__v" : 0 
}

问题答案:

它不起作用的原因是因为我使用的是箭头方法。我必须使其成为正常功能

userSchema.methods.setPassword = function (password) {

原因是箭头功能this与常规功能的区别。请查看以下内容以获取更多详细信息:

http://exploringjs.com/es6/ch_arrow-
functions.html



 类似资料:
  • 问题内容: 我相信这个问题与此类似,但用语有所不同。从Mongoose 4 文档中: 我们也可以定义自己的自定义文档实例方法。 现在,我们所有的动物实例都可以使用findSimilarTypes方法。 然后: 向模型添加静态方法也很简单。继续我们的animalSchema: 似乎通过静态方法,每个动物实例也将具有可用的方法。模式中的和对象是什么?有什么区别,为什么我要一个使用另一个? 问题答案:

  • 问题内容: 我正在尝试在架构之间建立某种关系,而解决方案存在一些问题。这是我的设备架构: 这里是房间模式: 猫鼬抛出错误 类型错误:未定义的类型,在 你尝试筑巢的架构?您只能使用引用或数组进行嵌套。 如果我更改为一切正常。您能解释一下为什么会这样吗? 问题答案: 是构造函数,要在模式定义中使用的是(或)。 所以应该看起来像这样:

  • 问题内容: 我对该方法的使用感到很困惑。这是我的用法,这是错误的: 我想要实现的只是从数据库中的事务中选择具有该用户名的事务,而我只想取出方法中列出的字段。谁能指出我该如何使用该方法?谢谢。 问题答案: 该文件说,你可以像这样实现的: 猫鼬v4.0 旧的过时的API 因此,您无需执行此操作。

  • 问题内容: 我正在学习平均堆栈,当我尝试使用启动服务器时 我有一个例外说: 这是我在/models/Posts.js中的代码 如我所见,应该为模型“ Post”注册架构,但是什么原因可能导致引发异常? 提前致谢。 编辑: 这是异常错误 这是带有猫鼬初始化的app.js代码: 前行: 问题答案: 模型导出不是问题。我遇到过同样的问题。 真正的问题是需要模型声明 低于路线依赖关系。只需将mongoDB

  • 问题内容: 我有一个让我感到困惑的奇怪问题。我有一个模型: 变体条目如下所示: 我需要添加一个新字段-说“颜色”。所以我这样做是为了批量更新: 但是,“颜色”字段未设置-如果我再次浏览并注释掉该行,则它不会显示。我似乎无法弄清楚为什么要这样做。我有一个onSave事件,该事件已正确触发,因此可以保存。我也没有对版本结构进行任何检查- 即没有代码只允许代码和价格。我显然缺少了一些东西,但几个小时后我

  • 问题内容: 在阅读教程时,通常会在模式和模型之间进行区分,特别是在处理mongoose / mongodb时。由于在该系统下似乎不存在“模型”,因此移植到Postgresql会有些混乱。两种方法有什么区别? 例如,此行的postgres / sql ORM等价于什么? (猫鼬和express.js): 问题答案: 在猫鼬中,模式表示特定文档的结构,可以是完整文档,也可以是文档的一部分。这是表达期望