Return 来自 database.query() 使用 sailsjs 的数据
Return data from database.query() using sailsjs
我正在尝试使用调用 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 任何东西,此方法中没有 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
can help you to organize your asynchronous code. By default, async is available globally in sails.js 的工具。
我正在尝试使用调用 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 任何东西,此方法中没有 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
can help you to organize your asynchronous code. By default, async is available globally in sails.js 的工具。