首页 > 解决方案 > 无法从 User.js 中找到方法

问题描述

我对快递的方法有一些问题。这是错误代码

index.js

app.post('/login', function (req, res) {
    User.findOne({ email: req.body.email }, function (err, user) {
        if (!user) {
            return res.json({
                loginSuccess: false,
                message: "이메일이 존재하지 않습니다"
            })
        }

        user.comparePassword(req.body.password, function (err, isMatch) {
            if (!isMatch) {
                return res.json({
                    loginSuccess: false,
                    message: "비밀번호가 틀립니다."
                })
            }

            user.generateToken(function (err, user) {
                if (err) return res.status(400).send(err);

                res.cookie("x_auth", user.token)
                    .status(200)
                    .json({ loginSuccess: true, userId: user._id })
            })
        })
    })
})

用户.js

userSchema.method.comparePassword = function (plainPassword, cb) {
    bcrypt.compare(plainPassword, this.password, function (err, isMatch) {
        if (err) return cb(err)

        cb(null, isMatch)
    })
}

错误

TypeError: user.comparePassword is not a function at /Users/baeyungug/Documents/Nodejs_React_basic/index.js:58:18 at /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/model.js:4870:16 at /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/model.js:4870:16 at /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16 at /Users /baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/model.js:4893:21 在 /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/query.js:4400:11 在 /Users/baeyungug/Documents /Nodejs_React_basic/node_modules/kareem/index.js:136:16 at processTicksAndRejections (internal/process/task_queues.js:79:11) 在函数实例上发出“错误”事件:在 /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/model.js:4872:13 在 /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16 [。 .. 匹配原始堆栈跟踪的行 ...] 在 processTicksAndRejections (internal/process/task_queues.js:79:11)

标签: javascriptnode.jsexpressauthentication

解决方案


它应该是

userSchema.methods.comparePassword = function(plainPassword, cb){

bcrypt.compare(plainPassword, this.password, function(err, isMatch) {
    if(err) return cb(err)

    cb(null,isMatch)
})}

方法更改为方法


推荐阅读