NodeJS TypeError: initializePassport is not a function

NodeJS TypeError: initializePassport is not a function

我正在用 NodeJS 开发一个带有注册和登录表单的小软件。代码被 server.js 文件第 14 行的错误“TypeError: initializePassport is not a function”阻塞。 这是文件 server.js:

if (process.env.NODE_ENV !== "production"){
  require("dotenv").config()
}

const express = require("express")
const app = express()
const bcrypt = require("bcryptjs")
const passport = require("passport")

const flash = require("express-flash")
const session = require("express-session")

const initializePassport = require("./passport-config")
initializePassport(
  passport,
  email => users.find(user => user.email === email),
  id => users.find(user => user.id === id)
)


const users = []

app.set("view-engine", "ejs")
app.use(express.urlencoded({extended:false}))
app.use(flash())
app.use(session({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())

app.get("/", (req, res) => {
  res.render("index.ejs")
})

app.get("/login", (req, res) => {
  res.render("login.ejs")
})

app.post("/login", passport.authenticate("local", {
  successRedirect: "/",
  failureRedirect: "/login",
  failureFlash: true
}))

app.post("/register", async (req, res) => {
  try{
    const hashedPassword = await bcrypt.hash(req.body.password, 10)
    users.push({
      id: Date.now().toString(),
      name: req.body.name,
      email: req.body.email,
      password: hashedPassword
    })
    res.redirect("/login")
  } catch {
    res.redirect("/register")
  }
  console.log(users)
})

app.get("/register", (req, res) => {
  res.render("register.ejs")
})

app.listen(3000)

这是护照-config.js:

const LocalStrategy = require('passport-local').Strategy
const bcrypt = require("bcryptjs")
function initialize(passport, getUserByEmail) {
  const authenticateUser = async (email, password, done) => {
    const user = getUserByEmail(email)
    if(user==null){
      return done(null, false, {message:"Non ci sono utenti con questo nome"})
    }

    try{
      if(await bcrypt.compare(password,user.password)){
        return done(null, user)
      } else {
        return done(null, false, {message:"Password Errata"})
      }
    } catch (e) {
      return done(e)
    }
  }
  passport.use(new LocalStrategy({ usernameField:"email"},
  authenticateUser))
  passport.serializeUser((user, done) => done(null, user.id))
  passport.deserializeUser((id, done) => {
    return done(null, getUserById(id))
  })
}

module.export = initialize

我试图重命名常量“initializePassport”或重新启动服务器,但它不起作用。在开始时,服务器将因相同的错误而阻塞。 我还尝试更改我从 passport-config.js 导出的功能。 还有其他解决方案吗?发送

我认为是 module.exports = initialize 而不是 module.export = initialize.

如果你想要命名导出,你只需要使用 exports = value

尝试这种方式:module.exports 默认导出。

护照-config.js

function initialize() {}
exports.initialize = initialize

server.js

const initializePassport = require("./passport-config").initialize
initializePassport()