为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我总是报user.comparePassword is undefined,写法和老师一样,是我mongoose的版本不对么?

正在回答

4 回答

这个跟 mongoose 的版本应该没啥关系,估计是代码问题,比对下这两段看哪里有写错没?


signin 时候的逻辑:

exports.signin = function(req, res) {
  var _user = req.body.user
  var name = _user.name
  var password = _user.password

  User.findOne({name: name}, function(err, user) {
    if (err) {
      console.log(err)
    }

    if (!user) {
      return res.redirect('/signup')
    }

    user.comparePassword(password, function(err, isMatch) {
      if (err) {
        console.log(err)
      }

      if (isMatch) {
        req.session.user = user

        return res.redirect('/')
      }
      else {
        return res.redirect('/signin')
      }
    })
  })
}


schema 里面的静态方法定义:

UserSchema.methods = {
  comparePassword: function(_password, cb) {
    bcrypt.compare(_password, this.password, function(err, isMatch) {
      if (err) return cb(err)

      cb(null, isMatch)
    })
  }
}


1 回复 有任何疑惑可以回复我~
#1

Phishing 提问者

找到问题了,signin的逻辑里面,我当时看视频的时候看的是User.find,然后就会报错,但是根据你写的代码是findOne就不会报错了
2014-10-10 回复 有任何疑惑可以回复我~
#2

Phishing 提问者

能说说直接的区别么?我在使用Meteor的时候,find出来的是Collection,findOne出来的是Object,mongoose里面是否也是这种区别?那我要给find()出来的实例加上方法应该怎么添加呢?谢谢
2014-10-10 回复 有任何疑惑可以回复我~
#3

dragon1204

老师,user.comparePassword(password, function(err, isMatch) { if (err) { console.log(err) } user怎么不是User comparePassword不是User下面的一个实例方法吗?
2016-04-18 回复 有任何疑惑可以回复我~
#4

_蜡笔小新_ 回复 dragon1204

user是实例吧,User是model
2017-07-03 回复 有任何疑惑可以回复我~
#5

NodeLoki 回复 Phishing 提问者

确实如此,但是我用两个应运输出user显示的的都是一个数组,不明白为什么会这样
2018-09-15 回复 有任何疑惑可以回复我~
查看2条回复

我也遇到这个问题了, 视频中讲  statics 是静态方法  可以通过模块调用 ,也就是说  在某个模块引入user.js    使用User.xxx 就能调用到 。 methods 是实例方法 ,使用前 要先进行实例化  即 var user = new User(user) ,  我是这样解决的。。。

1 回复 有任何疑惑可以回复我~

就是因为find出来是collection,不能直接使用。

1 回复 有任何疑惑可以回复我~

是不是把userSchema.methods写成了method

0 回复 有任何疑惑可以回复我~
#1

qq_水榭二钱乾_03658069

非常感谢
2016-08-31 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
node建站攻略(二期)——网站升级
  • 参与学习       51940    人
  • 解答问题       408    个

帮助你深入前后端开发留下的迷惑,为进一步自学打下基础

进入课程
意见反馈 帮助中心 APP下载
官方微信