[英]How do I return the results of a query using Sequelize and Javascript?
我是javascript的新手,我在這里遇到了困難。 我甚至不認為這是一個Sequelize問題,可能更多關於javascript行為。
我有這個代碼:
sequelize.query(query).success( function(row){
console.log(row);
}
)
var行返回我想要的值,但除了打印到控制台之外我不知道如何訪問它們。 我已經嘗試返回該值,但它沒有返回到我期望的位置,我不知道它在哪里。 我想要我的排,但我不知道如何獲得它:(
在服務器端使用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
值被存儲以供我提供給sequelize的回調的每個請求的引用。 這樣做的直接好處是,在查詢運行時可以處理更多請求,一旦完成,將執行更多代碼。 如果不是這種情況,那么您的進程(假設Node.js)將等待該一個查詢完成阻止所有其他請求。 這是不希望的。 回調樣式使得您的代碼可以執行所需的操作並繼續前進,等待重要的或重要的處理程序完成並在完成后調用函數。
編輯
自回答此問題以來,處理回調的API已發生變化。 Sequelize現在返回一個Promise
從.query
因此更改.success
來.then
應該是所有你需要做的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.