在服务器端一样,使用JavaScript,您需要使用回调。你不能“回归”他们像你想要的,但是,您可以写入对结果执行的操作的功能
sequelize.query(query).success(function(row) {
// Here is where you do your stuff on row
// End the process
process.exit();
}
一个更实际的例子,在明确路由处理程序:
// Create a session
app.post("/login", function(req, res) {
var username = req.body.username,
password = req.body.password;
// Obviously, do not inject this directly into the query in the real
// world ---- VERY BAD.
return sequelize
.query("SELECT * FROM users WHERE username = '" + username + "'")
.success(function(row) {
// Also - never store passwords in plain text
if (row.password === password) {
req.session.user = row;
return res.json({success: true});
}
else {
return res.json({success: false, incorrect: true});
}
});
});
忽略注射,明文密码示例 - 为了简洁
0。个
功能充当“封闭”通过存储在函数是在限定的范围的任何变量的引用。以我上面的例子中,正确res
值被存储用于通过我已经供给到sequelize回调每个请求参考。这样做的直接好处是可以在查询运行时处理更多的请求,并且一旦完成更多的代码将被执行。如果情况并非如此,那么你的进程(假设Node.js)会等待那一个查询完成阻止所有其他请求。这是不希望的。回调的风格是这样的,你的代码可以做什么,它需要继续前进,等待重要或processer重件完成并调用一个函数一次完成。
编辑
处理回调的API自回答这个问题改变。 Sequelize现在返回从.query
一个Promise
因此更改.success
到.then
应该是所有你需要做的。
的语言过滤感谢@JonathanHobbs。你的编辑被拒绝,因为我增加了更多的身体(我想自动?),所以我转移了必要的部分。 – 2013-05-05 23:09:55
感谢您的回复!我可能仍然是误解。我已经添加req.session.user存储行数据,以便这些信息可以在函数外部访问,但功能外它仍然是不确定的。最终,我想将这些信息存储在多个页面上,但似乎我不知道如何去做。 – user2352919 2013-05-05 23:19:35
你不能在它定义的范围内访问这个函数中的数据。你必须学习使用服务器端JavaScript来做的第一件事是停止同步思考。无论函数之外的任何代码都需要在函数内部与'req.session'赋值一起使用。看看我给你的例子 - 我不在回调之外处理信息,我在里面做。 – 2013-05-05 23:25:59