mongoose,node,不能使用user.model.js中定义的方法

时间:2017-01-16 10:07:36

标签: javascript node.js mongoose

我正在使用node和mongoose来构建应用程序。在测试时,存在一个奇怪的问题。这是我的auth.index.js(用户登录)。

auth.index.js:

var express = require('express');
var mongoose = require('mongoose');
var passport = require('passport');
var config = require('../config/environment');
var User = require('../api/user/user.model');
var jwt = require('jsonwebtoken');
var auth = require('./auth.service');
var router = express.Router();
router.post('/login', function (req, res, next){
User.find({email: req.body.email}, function (err, user){
    if (err) {
        return next(err);
    } else if (!user) {
        return res.json({message: 'Invalid email.'});
    } else {
            if(!user.authenticate(req.body.password)){
               return res.json({message: 'Invalid password.'});
            };
            var token = auth.signToken(user._id, user.username, user.role);
            return res.json({token: token});
    };
  });
});

这是user.model.js:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
  username: String,
  password: String,
  email: {type: String, lowercase: true},
  role: {type: String, default: 'user'},
  provider: String,
  date: String
});
UserSchema.methods = {
//check password
  authenticate: function(plainText) {
    return plainText === this.password;
  }
};

但是,在命令窗口中,它会返回

  

user.authenticat不是一个函数。

我想知道为什么,这是否意味着我不能直接使用该方法或者我需要通过 passport 调用该方法?感谢。

1 个答案:

答案 0 :(得分:0)

我认为你错位了你的方法。它应该是这样的。

UserSchema.methods.authenticate: function(plainText) {
       return plainText === this.password;
}

有关完整示例,请参阅以下链接。 https://scotch.io/tutorials/using-mongoosejs-in-node-js-and-mongodb-applications