mysql - 使用 sailsjs 从 database.query() 返回数据

标签 mysql database api sails.js waterline

我正在尝试使用调用 MYSQL 数据库存储过程的 sailsjs 构建一个 api。我决定通过将查询添加到服务中来分离查询,以便其他函数可以调用它们并使用它们。以下是我想出的。

在/api/controller/MySqlController 下

getAllUsers: function (req, res) {
    MySqlSpService.spGetAllUsers(function(err, result){
        if(err) return res.serverError(err);
        return res.ok(result[1]);
    });
}, 

在/api/services/MYSQLService 下

 var MySqlSpService= {

     spGetAllUsers: function(callback) {
       Database.query('call userDb.sp_get_all_users(@message, @mystatus)', function (err, results) {
        callback(err, results);
    }); // end query

}
 module.exports = MySqlSpService;

当我点击 api 时,数据完全按照我的想法显示。但问题是,当我尝试调用 spGetAllUsers 服务并分配给一个变量时,我得到了一个未定义的值。

像这样:

  var users = MySqlSpService.spGetAllUsers(function(err, result){
        if(err) return res.serverError(err);
        return result[1];
    });

我认为问题出在回调上,但我不确定如何从查询中检索数据。我已经搜索了答案,但似乎找不到与我的问题相匹配的正确搜索词。任何帮助将不胜感激提前致谢。

最佳答案

确实,您的问题与回调和异步代码有关。 MySqlSpService.spGetAllUsers() 函数不返回任何内容,此方法中没有return 语句。但它会执行一个回调函数,您可以在其中执行取决于 SQL 查询结果的代码。

您必须这样编写代码,因为数据库查询是异步执行的。

console.log('This is executed first');

MySqlSpService.spGetAllUsers(function(err, result){
    console.log('This is executed when the result of the database query is received');
    if(err) return res.serverError(err);
    users = result[1];
    /**
     * Here you can access to the "users" data
     * and execute code depending on it
     */
});

console.log('This is executed in second and it is not possible to know the result of the query yet');

类似 async 的工具可以帮助你组织你的异步代码。默认情况下,async is available globally in sails.js .

关于mysql - 使用 sailsjs 从 database.query() 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846484/

相关文章:

api - Google 从 Google Insights 切换到 Google Trends 后,Excel VBA 宏停止工作

mysql - mysql如何让条件或条件优先于其他条件?

MySQL 查找每月的最大日期

sql - 我如何连接到 ODBC Oracle 数据库?

行之间的 SQL 差异

.NET 应对向非托管 API 添加可选参数

api - LinkedIn API 字段选择器

mysql - 更新多行mysql

PHP mysqli_fetch_assoc 将数据存储在数组中

database - 如何使用 VB.NET 在 DataGridView 中执行“按类型搜索”文本框