【问题标题】:passport.js + express: TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))passport.js + express: TypeError('Router.use() 需要一个中间件函数但得到一个' + gettype(fn))
【发布时间】:2019-04-07 07:37:49
【问题描述】:

我使用 pasport.js + Express.js 出现错误

TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))

使用此代码

passport/local.js

var LocalStrategy = require("passport-local").Strategy;
var models = require("../../models");

module.exports = new LocalStrategy(
    function(username,password,done){
        models.User.findOne(
            {
                where:{username:username}
            },function(err,user){
                if(err){return done(err);}
                if(!user){return done(null,false,{message:"no such user"});}
                if(!user.validPassword(password)){return done(null,false,{message:"invalid password"});}
                return done(null,user);
            }
        );
    }
);

passport.js

var passport = require("passport");
var models = require("../models");
var local = require("./passport/local");

module.exports = () => {
    passport.serializeUser((user,done) => {
        done(null,user.id);
    });

    passport.deserializeUser((id,done) => {
        models.User.findOne({
            where:{id:id}
        }).then(user => {
            done(null,user);
        }).catch(err => {
            done(err,null);
        });
    });

    console.log(typeof(local));
    passport.use(local);
}

console.log(typeof(local));返回“对象”。但是 passport.use() 需要函数吗?

我该如何解决这个问题?

【问题讨论】:

  • 这段代码对我有用。对象就是它应该是的。你能检查所有其他文件是否导出了一些东西吗?由于是您的路由器抱怨,我认为问题出在其他地方,而不是 Passport。
  • 谢谢!!!!我在我的一个路由器文件中忘记了“module.exports = router”。
  • 酷。我发送了相同的答案,您可以将其标记为解决方案,以防有人遇到相同的错误

标签: javascript node.js express passport.js


【解决方案1】:

通常,此错误来自声明您的路线的文件之一中缺少导出。请仔细检查这些文件。

我也检查了一下,上面的代码可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2021-06-24
    • 2015-07-08
    • 2020-12-06
    • 2015-02-12
    相关资源
    最近更新 更多