我是javascript的新手,我在这里遇到了困难。我甚至不认为这是一个Sequelize问题,可能更多关于javascript行为。
我有这段代码:
sequelize.query(query).success( function(row){
console.log(row);
}
)
var行返回我想要的值,但除了打印到控制台之外我不知道如何访问它们。我已经尝试返回该值,但它没有返回到我期望的位置,我不知道它在哪里。我想要我的排,但我不知道如何获得它:(
答案 0 :(得分:6)
在服务器端使用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});
}
});
});
忽略注入和纯文本密码示例 - 为简洁起见。
函数通过存储对定义函数的作用域中的任何变量的引用来充当“闭包”。在上面的示例中,我提供的回调每个请求都存储了正确的res
值以供参考。续集。这样做的直接好处是,在查询运行时可以处理更多请求,一旦完成,将执行更多代码。如果不是这种情况,那么您的进程(假设Node.js)将等待该一个查询完成阻止所有其他请求。这是不希望的。回调样式使得您的代码可以执行所需的操作并继续前进,等待重要的或重要的处理程序完成并在完成后调用函数。
修改强>
自回答此问题以来,处理回调的API已发生变化。 Sequelize现在从Promise
返回.query
,因此您需要更改.success
到.then
。
答案 1 :(得分:3)
向后兼容性更改:
已删除事件支持,因此使用.on('success')或.success() 不再受支持。请尝试使用.then()。
根据此Raw queries documentation,您现在将使用类似的内容:
sequelize.query("SELECT * FROM `users`", { type: sequelize.QueryTypes.SELECT})
.then(function(users) {
console.log(users);
});