[英]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.