无法识别中间件JavaScript

无法识别中间件JavaScript,javascript,express,mongoose,passport-local,Javascript,Express,Mongoose,Passport Local,我最近开始自学,我被困在这一点上,无法克服 我正在尝试创建一个登录页面,这是我第一次使用中间件 我收到一个错误:抛出新的TypeError('app.use()需要一个中间件函数') TypeError:app.use()需要一个中间件函数 下面是代码: var express = require("express"), mongoose = require("mongoose"), p

我最近开始自学,我被困在这一点上,无法克服

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

我收到一个错误:抛出新的TypeError('app.use()需要一个中间件函数')

TypeError: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......");
})

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

替换

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


另外,我认为您需要传递一个函数
newlocalstrategy(User.authenticate)
,而不是它的结果。当然,除非您实现了它以返回回调(很难说没有看到您的代码)

app.use
的五次调用中,哪一次失败了?给出一个.Helol Yury,passport.use(新的LocalStrategy(User.authenticate());非常感谢,现在可以了:)
passport.use(new LocalStrategy(User.authenticate()));