2017-01-16 87 views
0

我使用節點和貓鼬建立一個應用程序中定義的方法。在測試時,存在一個奇怪的問題。這是我的auth.index.js(用於用戶登錄)。貓鼬,節點,不能用在user.model.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; 
    } 
}; 

然而,在命令窗口,它返回

用戶.authenticat不是一個函數。

我想知道爲什麼,這是否意味着我不能直接使用的方法或者我需要通過護照調用的方法?謝謝。

回答

0

我想你遺失你的方法。它應該是這樣的。

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

有關完整示例,請參見以下鏈接。 https://scotch.io/tutorials/using-mongoosejs-in-node-js-and-mongodb-applications

+0

我試過了,但還是返回user.authenticate不是一個函數。 – vivian

+0

你導出這樣? module.exports = User; –

+0

這樣的:module.exports = mongoose.model( '用戶',UserSchema, '用戶'); – vivian