簡體   English   中英

如何使用Sequelize和Javascript返回查詢結果?

[英]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應該是所有你需要做的。

根據更改日志

向后兼容性更改

事件支持已被刪除,因此不再支持使用.on('success')或.success()。 嘗試使用.then()代替。

根據這個Raw查詢文檔,您現在將使用類似的東西:

sequelize.query("SELECT * FROM `users`", { type: sequelize.QueryTypes.SELECT})
    .then(function(users) {
        console.log(users);
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM