猫鼬 - 无法调用方法 'findOne'



我正在尝试使用护照添加Facebook登录,我被困在以下错误:

TypeError: Cannot call method 'findOne' of undefined at Strategy._verify

我需要models.js在我的app.js文件,我传入护照模型

app.js

var Models = require('./config/models');
require('./config/passport')(passport,loginStrategies,Models);

我的护照模型- passport.js:

module.exports = function(passport, loginStrategies, Models){
   //Passport serialize and deserialize user
   passport.use(new loginStrategies.FacebookStrategy({
      //FB App Config
    },function(token, tokenSecret, profile, done) {
    Models.User.findOne({uid: profile.id}, function(err, user) {
      if(user) {
        done(null, user);
      } else {
        var user = new Models.User();
        user.uid = profile.id;
        user.name = profile.displayName;
        user.email = profile.email;
        user.save(function(err) {
          if(err) {
            throw err;
          }
          done(null, user);
        });
      }
    });
    // ...

Models.js

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
module.exports = function(){
    DB_URL = "mongodb://localhost/test";
    //User Schema
    var UserSchema = new Schema({
        uid: Number,
        name: String,
        email: String,
    });

    mongoose.connect(DB_URL);
    mongoose.model('User', UserSchema);
    return{
        User : mongoose.model('User')   
    }; 
};

由于models.js正在导出function:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
module.exports = function(){ // <!---
    // ...
};

需要对Object进行调用,User模型为return ed。模块为require d的地方:

var Models = require('./config/models')();
//                                     ^^
require('./config/passport')(passport,loginStrategies,Models);
console.log(typeof Models);    // 'object'
console.log('User' in Models); // true

或者,在使用的地方:

module.exports = function(passport, loginStrategies, Models){
   //Passport serialize and deserialize user
   var models = Models();
   // ...
       models.User.findOne(...);

最新更新