[英]TypeError: SomeFunction is not a function (using Mongoose)
我遇到此錯誤:TypeError:User.getUserByUsername不是Strategy._verify的函數(... / routes / users.js:65:10)
var User = require('../models/user');
passport.use(new LocalStrategy(
function(username, password, done) {
User.getUserByUsername(username, function(err,user){
if(err) throw err;
if (!user){
return done(null, false, {message: 'Unknow User'});
}
User.comparePassword(password, user.password, function(err, isMatch){
if(err) throw err;
if(isMatch){
return done(null,user);
} else {
return done(null, false, {message: "Invalid password"});
}
});
});
}));
該函數在models / user.js中定義
module.exports.getUserByUsername = function(username, callback){
var query = {username: username};
User.findOne(query, callback);
}
檢查../models/user
模塊要導出什么。 從對問題的描述中,它可以導出某些內容,但是該內容不具有getUserByUsername
函數-該模塊可能導出的是原型或類,您應該實例化,例如:
var UserModel = require('../models/user');
var user = new UserModel();
...
從外觀上看,您正在使用貓鼬(總是在您的問題中提到)。 如果不是,請忽略以下內容(但請更新您的問題以表示您正在使用哪個ORM)。
我認為您可能在models/user.js
這樣做:
module.exports.getUserByUsername = function(...) {}
...
module.exports = mongoose.model('User', ...);
后面的分配將替換module.exports
,因此使getUserByUsername
無法訪問。
相反,最好將getUserByUsername
靜態方法 ,就像comparePassword
一樣:
userSchema.statics.getUserByUsername = function(...) {}
請嘗試以下操作,如下更改您的User.js文件:
exports.getUserByUsername = function(username, callback){
var query = {username: username};
User.findOne(query, callback);
};
可能是您分配給module.exports
稍后在文件下module.exports
嗎? 分配給module.exports
或exports
后,應聲明導出成員
例如
module.exports.getUserByUsername = function() {...};
module.exports = User;
會是與您類似的常見問題。
問題是由於錯誤地聲明了流程流的功能之一。 為了正確導出所有對象,必須以相同的方式聲明所有函數。
module.exports.getUserByUsername = function()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.