只有一个会话变量未定义

时间:2017-08-11 09:16:54

标签: javascript node.js session cookies

我遇到了一个无法解决的问题,我无法在SO或其他地方找到任何相关的解决方案。

基本上我只想将3个带数据的数组发送到客户端Javascript。它适用于2个阵列,但是当我在浏览器中刷新页面时,第3个变为空,我不知道为什么。

见下相关代码;

app.post("/", function(req, res) {
ssn = req.session;
ssn.anlagen = [];
var Betreiber = {
    TableName: "XXX",
    KeyConditionExpression: "#usr = :user",
    ExpressionAttributeNames: {
        "#usr": "User",
    },
    ExpressionAttributeValues: {
        ":user": req.body.name
    },
};

docClient.query(Betreiber, function(err, data) {
    if (data.Count == 0 || req.body.passwort != data.Items[0].Passwort) {
        res.render(__dirname + '/views/login', {text: "Der Nutzername oder das Passwort sind falsch! Bitte versuchen Sie es erneut."});
    }
    else if (req.body.passwort == data.Items[0].Passwort) {
        anlagenarray = [];
        ssn.user = data.Items[0].User; // WORKS FINE
        ssn.admin = data.Items[0].Admin; // WORKS FINE
        if (ssn.admin == false) { // Normal
            for (var i = 0; i < data.Items[0].Anlagen.length; i++) {
                ssn.ident = data.Items[0].Anlagen[Object.keys(data.Items[0].Anlagen)[i]];
                var Anlagenbezeichnung = {
                    TableName: "SCR-Anlagen",
                    KeyConditionExpression: "#ident = :id",
                    ExpressionAttributeNames: {
                        "#ident": "Id",
                    },
                    ExpressionAttributeValues: {
                        ":id": ssn.ident
                    },
                };

                docClient.query(Anlagenbezeichnung, function(err, data) {
                  ssn.anlagen = data.Items[0].Bezeichnung // this Variable gets "[]" after refresh
                   ssn.anlagen.sort();
                });
            }
        }   

继承代码以将Arrays发送到客户端JS;

app.post("/anlagen", function(req, res) {
    if (ssn.user) {
        res.send({
            name: ssn.user, // WORKS
            adminstatus: ssn.admin, // WORKS
            bezeichnungen: ssn.anlagen // [] after Page refresh
        });
    }
    else {
        res.render(__dirname + '/views/login');
    }
});

我找不到任何解决方案。我确实尝试了一切,但我不断收到这个错误。 详细的解决方案获得高度赞赏。

这是我第一次尝试后端网站开发,不要太难,如果我的完整代码是完全废话^^

提前感谢。

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题。

如果您有类似的问题。只需将req.session.save();放入查询中即可。

像这样:

docClient.query(params, function(err, data) {   
req.session.bezeichnung.push([data.Items[0].Bezeichnung,data.Items[0].Id]);      
req.session.save();
});

这将使变量可以在查询范围之外访问。