2
votes

I have some problem with method in express. Here is the error code

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 })
            })
        })
    })
})

User.js

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

        cb(null, isMatch)
    })
}

Error

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 at /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/query.js:4400:11 at /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/kareem/index.js:136:16 at processTicksAndRejections (internal/process/task_queues.js:79:11) Emitted 'error' event on Function instance at: at /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/model.js:4872:13 at /Users/baeyungug/Documents/Nodejs_React_basic/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16 [... lines matching original stack trace ...] at processTicksAndRejections (internal/process/task_queues.js:79:11)

1

1 Answers

2
votes

It should be

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

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

    cb(null,isMatch)
})}

change method to methods