我正在尝试使用护照添加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(...);