微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

localhost 在 NodeJS 和 Express-session 中给你重定向了太多次

如何解决localhost 在 NodeJS 和 Express-session 中给你重定向了太多次

我正在关注 youtube 上的教程,代码在他的计算机上运行良好,但在我的系统上无法运行。

我遇到了错误。 “此页面目前无法正常工作 localhost 将您重定向了太多次。 要解决此问题,请尝试清除您的 cookie。” 当我尝试跳转到 /home 页面时,'/' 页面工作正常,但它不起作用 任何人都可以帮忙看看错误究竟在哪里?不幸的是,每次我遇到相同的错误时,我都按照教程进行了 5 次重写,这是出乎意料的

const express = require('express');
const bodyParser = require('body-parser');
const session = require('express-session');



const TWO_HOUR = 1000 * 60 * 60 * 2

const {
    PORT = 3000,NODE_ENV = 'development',SESS_NAME = 'sid',SESS_SECRET = 'SADFSDF@*9SDF',SESS_LIFETIME = TWO_HOUR
} = process.env

const IN_PROD = NODE_ENV === 'production'



const users = [
    {id: 1,name: 'Asad',email: 'asad_gmail.com',password: '123'},{id: 2,name: 'Abdullah',email: 'abdullah_gmail.com',{id: 3,name: 'Shehroz',email: 'shehroz_gmail.com',password: '123'}
]

const app = express();


 app.use(bodyParser.urlencoded({
     extended: true
 }))
 
 

app.use(session({
    name: SESS_NAME,resave: false,saveUninitialized: false,secret: SESS_SECRET,cookie:{
        maxAge: SESS_LIFETIME,sameSite: true,secure: IN_PROD
    }
}))

const redirectLogin = (req,res,next) => {
    if(!req.session.userId){
        res.redirect('/login')
    } else{
        next()
    }
}

const redirectHome = (req,next) => {
    if(!req.session.userId){
        res.redirect('/home')
    } else{
        next()
    }
}


  
app.get('/',(req,res) => {
    const {userId} = req.session
    //const userId = 1
    
    res.send(`
        <h1>Welcome!</h1>

        ${userId ? `

        <a href='/home'>home</a>
        <form method='post' action='/logout'>
        <button>logout</button>
        </form>

        ` : `
        <a href='/login'>Login</a>
        <a href='/register'>Register</a>
        `}

        

       
    `)
})

app.get('/home',redirectLogin,res) => {
    res.send(`
        <h1>Home</h1>
        <a href='/'>Main</a>
        <ul>
            <li>Name:</li>
            <li>Email:</li>
        </ul>
    `)
})

app.get('/login',redirectHome,res) => {
   
   res.send(`
    <h1>Login</h1>

    <form method='post' action='/login'>
    <input type='email' name='email' placeholder='email' required />
    <input type='password' name='password' placeholder='password' required />
    <input type='submit' />

    </form>
    <a href='/register'>Register</a>
   `)
})

app.get('/register',res) => {
    res.send(`
    <h1>Register</h1>

    <form method='post' action='/register'>
    <input type='text' name='name' placeholder='name' required />
    <input type='email' name='email' placeholder='email' required />
    <input type='password' name='password' placeholder='password' required />
    <input type='submit' />

    </form>
    <a href='/login'>Login</a>
   `)
})

app.post('/login',res) => {
    const {email,password } = req.body

    if(email && password) {
        const user = users.find(user => user.email === email && user.password === password)
    if(user) {
        req.session.userId = user.id
        return res.redirect('/home')
    }
    }
    res.redirect('/login')
})

app.post('/register',res) => {
    const {name,email,password } = req.body

    if(name && email && password) {
        const exists = users.some(
            user => user.email === email
        )
        if(!exists) {
            const user = {
                id: users.length + 1,name,password
            }
            users.push(user)
            req.session.userId = user.id

            return res.redirect('/home')
        }
    }
    res.redirect('/register')
})

app.post('/logout',res) => {
    req.session.destroy(err => {
        if(err){
            return res.redirect('/home')
        }
        res.clearCookie(SESS_NAME)
        res.redirect('/login')
    })
})


app.listen(PORT,() => console.log(
    `http://localhost:${PORT}`
))

// npm run dev


解决方法

这是因为有一个循环重定向路径。如果您在 consolelog("Textsomething")redirectHome redirectLogin 语句中尝试 if,您会发现重定向循环。

一种解决方法是修改重定向函数的逻辑,可以删除redirectHome if语句中的感叹号,因为它需要用户ID才能访问/主页等.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。