类型错误:passport.initialize 不是一个函数

yej*_*elw 1 mongoose node.js passport-local passport.js

我使用 Node.js 和 Passport,但由于某种原因我似乎无法访问 Passport.initialize 函数。它在另一个文件中工作,但是当我尝试在另一个项目(下面的文件)中使用它时,它无法正常工作。

我添加相关文件。

服务器.js

const express = require('express');
const mongoose = require('mongoose');

const port = process.env.PORT || 3000;
const morgan = require('morgan');
const bodyParser = require('body-parser');
const methodOverride = require('method-override');
const app = express();
const authRoutes = require('./app/authRoutes.js');

mongoose.connect("mongodb://localhost/MeanMapApp");

const passport = require('./app/passport');
app.use(passport.initialize());

require('./app/routes.js')(app);

app.listen(port);
console.log('App listening on port ' + port);
Run Code Online (Sandbox Code Playgroud)

护照.js

const passport = require('passport');
const request = require('request');
const LocalStrategy = require('passport-local').Strategy;

const User = require('../models/User');

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

passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
        done(err, user);
    });
});
Run Code Online (Sandbox Code Playgroud)

authRoutes.js

var express = require('express');
const bluebird = require('bluebird');
const crypto = bluebird.promisifyAll(require('crypto'));
const passport = require('passport');
const User = require('../models/User');

/**
 * GET /login
 * Login page.
 */
exports.getLogin = (req, res) => {
    if (req.user) {
        return res.redirect('/account');
    }
    res.render('account/login', {
        title: 'Login'
    });
};
/**
 * POST /login
 * Sign in using email and password.
 */
exports.postLogin = (req, res, next) => {
    req.assert('email', 'Email is not valid').isEmail();
    req.assert('password', 'Password cannot be blank').notEmpty();
    req.sanitize('email').normalizeEmail({ remove_dots: false });

    const errors = req.validationErrors();

    if (errors) {
        req.flash('errors', errors);
        return res.redirect('/login');
    }

    passport.authenticate('local', (err, user, info) => {
        if (err) { return next(err); }
        if (!user) {
            req.flash('errors', info);
            return res.redirect('/login');
        }
        req.logIn(user, (err) => {
            if (err) { return next(err); }
            req.flash('success', { msg: 'Success! You are logged in.' });
            res.redirect('/account');
        });
    })(req, res, next);
};

/**
 * GET /logout
 * Log out.
 */
exports.logout = (req, res) => {
    req.logout();
    res.redirect('/');
};

/**
 * GET /signup
 * Signup page.
 */
exports.getSignup = (req, res) => {
    if (req.user) {
        return res.redirect('/account');
    }
    res.render('account/signup', {
        title: 'Create Account'
    });
};

/**
 * POST /signup
 * Create a new local account.
 */
exports.postSignup = (req, res, next) => {
    req.assert('email', 'Email is not valid').isEmail();
    req.assert('password', 'Password must be at least 4 characters long').len(4);
    req.assert('confirmPassword', 'Passwords do not match').equals(req.body.password);
    req.sanitize('email').normalizeEmail({ remove_dots: false });

    const errors = req.validationErrors();

    if (errors) {
        req.flash('errors', errors);
        return res.redirect('/signup');
    }

    const user = new User({
        email: req.body.email,
        password: req.body.password
    });

    User.findOne({ email: req.body.email }, (err, existingUser) => {
        if (err) { return next(err); }
        if (existingUser) {
            req.flash('errors', { msg: 'Account with that email address already exists.' });
            return res.redirect('/signup');
        }
        user.save((err) => {
            if (err) { return next(err); }
            req.logIn(user, (err) => {
                if (err) {
                    return next(err);
                }

                res.redirect('/account');
            });
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

Zad*_*ola 5

我相信你这样做的方式是错误的,而不是

const passport = require('./app/passport');
app.use(passport.initialize());
Run Code Online (Sandbox Code Playgroud)

你应该使用

var passport = require('passport');
require('./app/passport');
app.use(passport.initialize());
Run Code Online (Sandbox Code Playgroud)

那应该可以解决它