中间件 JavaScript 无法识别

Middleware JavaScript not recognized

我最近开始自学了,一直卡在这上面,过不去。

我正在尝试创建一个登录页面,这是我第一次使用中间件

我收到一个错误:抛出新类型错误('app.use() requires a middleware function')

类型错误:app.use() 需要一个中间件函数

这是下面的代码:

var express               = require("express"),
    mongoose              = require("mongoose"),
    passport              = require("passport"),
    bodyParser            = require("body-parser"),
    User                  =require("./models/user"),
    LocalStrategy         =require("passport-local"),
    passportLocalMongoose = require("passport-local-mongoose");


mongoose.connect("mongodb://localhost:27017/auth_demo_app", { useUnifiedTopology: true },{ useNewUrlParser: true });
var app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended:true}));

app.use(require("express-session")({
    secret: "Neno is the best and cutest dog in the world.",
    resave: false,
    saveUninitialized: false
}));
app.use(new LocalStrategy(User.authenticate()));
app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(User.serializeUser()); // Encoding the session
passport.deserializeUser(User.deserializeUser()); // Decoding the session

// =========
// ROUTES 
// =========

app.get("/", function(req, res){
    res.render("home");
});
app.get("/secret", function(req, res){
    res.render("secret");
});

// ===========
// Auth ROUTES
// ===========

// Show Signup Form
app.get("/register", function (req, res){ // req - request / res - response
    res.render("register");
});
//handling USER SIGN UP
app.post("/register", function(req, res){
    req.body.username
    req.body.password
    User.register(new User({username: req.body.username}), req.body.password, function(err, user){
        if(err) {
            console.log(err);
            res.render("register");
        } else {
            passport.authenticate("local")(req, res, function(){
                res.redirect("secret");
            })
        }
    });
})

//handling USER LOG IN / LOGIN ROUTES

app.get("/login", function (req, res){
    res.render("login");
});
//login logic
//middleware
app.post("/login", passport.authenticate("local", {
    successRedirect: "/secret",
    failureRedirect: "/login"
}),function(req, res) {
});
app.listen(3000, function (){
    console.log("Server Started......");
})

您需要将策略传递给护照,而不是应用程序。

替换

app.use(new LocalStrategy(User.authenticate()));

passport.use(new LocalStrategy(User.authenticate()));

此外,我认为您需要传递一个函数 new LocalStrategy(User.authenticate) 而不是它的结果。当然,除非你已经将它实现为 return 回调(很难说 w/o 看到你的代码)