use*_*919 4 javascript database sequelize.js
我是javascript的新手,我在这里遇到了困难.我甚至不认为这是一个Sequelize问题,可能更多关于javascript行为.
我有这个代码:
sequelize.query(query).success( function(row){
console.log(row);
}
)
Run Code Online (Sandbox Code Playgroud)
var行返回我想要的值,但除了打印到控制台之外我不知道如何访问它们.我已经尝试返回该值,但它没有返回到我期望的位置,我不知道它在哪里.我想要我的排,但我不知道如何获得它:(
在服务器端使用Javascript就好了,这要求你使用回调.您不能像想要的那样"返回"它们,但是您可以编写一个函数来对结果执行操作.
sequelize.query(query).success(function(row) {
// Here is where you do your stuff on row
// End the process
process.exit();
}
Run Code Online (Sandbox Code Playgroud)
一个更实际的例子,在快速路由处理程序中:
// 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});
}
});
});
Run Code Online (Sandbox Code Playgroud)
忽略注入和纯文本密码示例 - 为简洁起见.
函数通过存储对函数定义范围内的任何变量的引用来充当"闭包".在上面的示例中,res通过我提供给sequelize的回调,每个请求存储正确的值以供参考.这样做的直接好处是,在查询运行时可以处理更多请求,一旦完成,将执行更多代码.如果不是这种情况,那么您的进程(假设Node.js)将等待该一个查询完成阻止所有其他请求.这是不希望的.回调样式使得您的代码可以执行所需的操作并继续前进,等待重要的或重要的处理程序完成并在完成后调用函数.
编辑
自回答此问题以来,处理回调的API已发生变化.Sequelize现在返回一个Promise从.query改变.success到.then应该是你需要做的所有事情.