2017-01-16 8 views
0

私はノードとmongooseを使ってアプリケーションを構築しています。テストの際には、奇妙な問題があります。ここに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は関数ではありません。

私のしたいが、なぜ知っている、そしてそれは私が直接メソッドを使用することはできませんか、私はパスポートを通じてメソッドを呼び出す必要があることを意味するのでしょうか?ありがとう。

答えて

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

関連する問題