发送variables到布局

我正在学习如何使用Node.js来构buildWeb应用程序并进行expression,所以我现在还真的是noob。

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

我从我的数据库发送的值,到我的布局,build在翡翠。

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

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); }); } 

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

 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()),当我调用这个函数,布局改变,我发送一些值。

但是现在我想要创build一个名为getPosts()的新函数,从另一个表中获取信息,并将其发送到布局,就像我在调用函数getUser()

我试图做这样的事情,但我没有成功,当我调用范围以外的variables,我一直在“未定义”。

 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" }); } }); }); 

我需要更改我的代码? 谢谢。

你应该阅读关于node.js asynchronization ,所以如果你改变你的代码,如下所示:

 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 } }); } }); } else { res.render('index', { validation: "failed" }); } }); });