【问题标题】:NodeJS TypeError: initializePassport is not a functionNodeJS TypeError:initializePassport 不是函数
【发布时间】:2021-07-22 10:55:16
【问题描述】:

我正在用 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)

这是护照配置.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

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

【问题讨论】:

    标签: javascript node.js passport.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢。那个“s”挡住了一切。
    【解决方案2】:

    passport-config.js

    function initialize() {}
    exports.initialize = initialize
    

    server.js

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

    【讨论】:

      猜你喜欢
      • 2018-05-03
      • 2020-07-12
      • 2020-07-14
      • 2017-11-22
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      相关资源
      最近更新 更多