将变量发送到布局

时间:2016-12-30 19:47:09

标签: node.js express

我正在学习如何使用Node.js构建Web应用程序并表达,所以我还没有。

所以,我在这里有一些问题。我正在建立一个登陆页面,我从我的数据库(在mysql中)获得的所有信息都将出现在一个页面中。

我将数据库中的值发送到我的布局,内置在Jade中。

我创建了多个函数来获取特定数据,这里有一个例子:

function getUser(username, userId, callback) {
    connection.query('SELECT * FROM users WHERE user_id = ?', userId, function(err, result) {
        if (err)
            callback(err, null);
        else

        var callBackString = {};
        callBackString.value1 = result[0].user_email;
        callBackString.value2 = result[0].user_name;


        callback(null, callBackString);

    });

}

当用户尝试登录时,我会检查用户是否存在更改布局并向布局发送一些重要值:

router.post('/login', function(req, res) {

    connection.query('SELECT user_id FROM users WHERE user_email = ? AND user_password = ?', [req.body.login, req.body.password], function(err, results) {
            if (err) throw err;

            if (results[0]) {

                userId = results[0].user_id;

                getUser("username", userId, function(err, data) {
                    if (err) {
                        console.log("ERROR : ", err);
                    } else {

                        res.render('logged_in', {
                            email: data.value1,
                            username: data.value2,

                        });

                        res.end();

                    }

                });


            } else {
                res.render('index', {
                    validation: "failed"

                });

            }

        });

    });

我只在这里调用一个函数(getUser()),当我调用这个函数时,布局发生了变化,我发送了一些值。

但是现在我想创建一个名为getPosts()的新函数,从不同的表中获取信息,并将其发送到布局,就像我调用函数getUser()时所做的那样

我试图做这样的事情,但是我没有成功,当我把变量称为范围之外我不断得到"未定义"。

router.post('/login', function(req, res) {

    connection.query('SELECT user_id FROM users WHERE user_email = ? AND user_password = ?', [req.body.login, req.body.password], function(err, results) {
        if (err) throw err;

        if (results[0]) {

            userId = results[0].user_id;

            getUser("username", userId, function(err, data) {
                if (err) {
                    console.log("ERROR : ", err);
                } else {
                    email = data.value1;
                    username = data.value2;

                }

            });

            getPosts("posts", 1, function(err, data) {
                if (err) {
                    console.log("ERROR : ", err);
                } else {
                    postName = data.value1;
                    postText = data.value2;

                }

            });

            res.render('logged_in', {
                email: email,
                username: username,
                pstname: postName,
                psttxt: postText

            });

            res.end();

        } else {
            res.render('index', {
                validation: "failed"

            });

        }

    });

});

我需要更改代码?谢谢。

1 个答案:

答案 0 :(得分:1)

您应该在ModelMap中了解asynchronization,所以如果您更改代码,则可能会有效:



node.js