2017-01-16 1 views
0

노드 및 몽구스를 사용하여 앱을 구축하고 있습니다. 그리고 테스트 할 때 이상한 문제가 있습니다. 여기에 내 auth.index.js (사용자 로그인 용)가 있습니다.mongoose, node, 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는 함수가 아닙니다.

I 싶어 이유를 알고, 그리고 내가 직접 방법을 사용할 수 없습니다 또는 내가 여권을 통해 메소드를 호출 할 필요가 있음을 의미합니까? 감사.

답변

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 = 사용자; –

+0

이렇게 : module.exports = mongoose.model ('User', UserSchema, 'User'); – vivian

관련 문제