【问题标题】:express js session property undefinedexpress js会话属性未定义
【发布时间】:2022-01-14 22:25:10
【问题描述】:

我在 express 会话中遇到了一些问题。 当我登录时,我将 session.uid session.user 和 session.isAuth 设置为其参数。 当我单击需要会话信息的其他一些方面时。它有时有效,有时无效。有时我得到“用户”未定义的错误.... 我有这个代码。当我在 editQuestion 上单击示例时,我得到了错误。当我在'/'路线中执行console.log时,它可以工作。 有人可以告诉我我在这里缺少什么吗?

var express = require("express");
const session = require("express-session");
const cookieParser = require("cookie-parser");
const flush = require("connect-flash");
var path = require("path");
const w2v = require("word2vec");
const port = 3000;
const background = require("./public/js/background.js")
const datahandler = require("./public/js/data_handling.js")
//var routes = require("./routes");

var app = express();

app.set("port", process.env.PORT || 3000);

app.set("views", path.join(__dirname, "public/html"));
//app.set("view engine", "ejs");
app.engine('html', require('ejs').renderFile);

app.use(express.static(path.join(__dirname, 'public')));

app.use(cookieParser());
app.use(session({
    cookie:{maxAge:60000},
    resave: false,
    saveUninitialized: false,
    secret: "secret"
}));
//app.use(flush());

//Bodyparser
app.use(express.urlencoded({extended:true}));

const isAuth = (req, res, next)=>{
    if(req.session.isAuth){
        next();
    }else{
        res.redirect("/login");
    }
}



app.get("/", function(req, res) {
    
        res.render("index.html");
});

app.get("/question", function(req,res){
    var Qid = Number(req.query.id)
})

app.get("/search", function(req,res){
    var searchWords = req.query.search.split(' ');
    w2v.loadModel('public/data/word_vectors.txt', (error, model) =>{
        var word_vectors = model.getVectors(searchWords)
        var avg_vector = background.averageVectors(word_vectors, model);
        var questions = background.mostSimilarQuestions('/../data/qentities.txt', avg_vector);
        var resultjson = datahandler.getQuestionsFromSimilar(questions);
        res.json(resultjson)
    })
});

app.get("/search/new", function(req,res){
    
    var resultjson = datahandler.getNewestQuestions();
    //console.log(resultjson);
    res.json(resultjson);
    
});

app.get("/LogIn", function(req, res){
    console.log(req.session.user);    
    res.render("LogIn.html");
})
app.post("/logIn",async(req, res) =>{
    //LogIn
    const{username, password} = req.body;
    const user = datahandler.logIn(username, password);
    if(!user){
        return res.send("Log In failed!")
        
    }else{        
        req.session.uid = user[0];
        req.session.user = user[1];
        req.session.isAuth = true;
        req.session.save();
        
        res.redirect("/");
    }
});

app.get("/user",isAuth, (res, req)=>{
    //res.send(req.session.user);
    //res.json(req.session.user)
    res.redirect("Profil.html");//Doesn't work ;(
});

app.get("/editQuestion", isAuth,(res, req)=>{
    //console.log(req.session.user); Not working here. WHY?????
    res.render("editQuestion.html");
});
app.get("/viewQuestion", isAuth,(res, req)=>{
    console.log(req.session.user);
    res.render("viewQuestion.html");
});
app.get('/logout',function(req,res){
    console.log(req.session);
    req.session.destroy(function(err) {
        if(err) {
            console.log(err);
        } else {
            res.redirect('/');
        }
    });    
});

app.get("/Register", function(req,res){
    res.render("Register.html")
})
app.post("/register", async(req,res)=>{
    const{newUsername, password} = req.body;
    const newuser = datahandler.registerNewUser(newUsername, password);
    if(!newuser){
        res.redirect("/Register");
    }
    else{
        res.redirect("/");
    }
})

app.get("/about", function(req, res) {

    res.render("about.html");
});


app.all('*',(req,res)=>{
    res.status(404).render('404.html');
});

app.listen(app.get("port"), function() {
    console.log(`Example app listening at http://localhost:${port}`);
}); 

这是我点击编辑问题时得到的结果:

TypeError: Cannot read property 'user' of undefined 

而这在'/'中什么是正确的:

TP

【问题讨论】:

    标签: express session


    【解决方案1】:

    好的。我解决了.... 我在函数中交换了 req 和 res...

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2014-05-29
    • 2016-09-07
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多