簡體   English   中英

TypeError:SomeFunction不是函數(使用Mongoose)

[英]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.exportsexports后,應聲明導出成員

例如

    module.exports.getUserByUsername = function() {...};

    module.exports = User;

會是與您類似的常見問題。

問題是由於錯誤地聲明了流程流的功能之一。 為了正確導出所有對象,必須以相同的方式聲明所有函數。

module.exports.getUserByUsername = function()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM