gpt4 book ai didi

javascript - Mongoose - 无法调用方法 'findOne'

转载 作者:行者123 更新时间:2023-12-03 12:19:00 27 4
gpt4 key购买 nike

我尝试使用护照添加 Facebook 登录信息,但遇到以下错误:

类型错误:无法在 Strategy._verify 中调用未定义的方法“findOne”

我的 app.js 文件中需要 models.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 正在导出函数:

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

需要包含对它的调用,以便Object 和要返回User 模型。无论模块是 required:

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(...);

关于javascript - Mongoose - 无法调用方法 'findOne',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526797/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com