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