【问题标题】:How to access mysql record outside function in exprees.js如何在express.js中访问mysql记录外部函数
【发布时间】:2018-08-04 08:32:01
【问题描述】:
我正在做以下代码。
var data=[];
sequelize.query("SELECT `name`,`mobile` FROM `emp_table` LIMIT 0,50",function(result){
data['main']=result;
});
console.log(data['main']); // returns 'undefined'
我使用了回调地狱方法。但我认为这不是正确的方法。
请帮帮我。
【问题讨论】:
标签:
javascript
mysql
node.js
express
sequelize.js
【解决方案1】:
由于异步console.log(data['main']);中的nodeJS将首先执行,因为查询已被处理(从数据库中获取数据是异步调用)。
您可以尝试以下代码以获得预期的输出。
var data=[];
sequelize.query("SELECT `name`,`mobile` FROM `emp_table` LIMIT
0,50",function(result){
data['main']=result;
console.log(data['main']);
});
【解决方案2】:
我不确定你所说的回调地狱方法是什么意思。但是您在 query() 调用中使用了回调(作为参数提供的函数)。该函数仅在query() 的主体调用它时才被调用。使其行为异步。
现在的问题是,console.log 是否在此“异步循环”之外并按顺序运行。所以data['main'] 在调用console.log 时实际上是未定义的。
要修复它,请执行以下操作:
var data=[];
sequelize.query("SELECT `name`,`mobile` FROM `emp_table` LIMIT 0,50",function(result){
data['main']=result;
console.log(data['main']);
});
将console.log 移动到回调中。
【解决方案3】:
从数据库中获取数据时需要使用promise。您可以在代码的then 部分打印您的数据。例子:
调用从 db 获取数据并返回承诺的服务。
exports.getAllUsers = function() {
// this is the place where you will execute your query.
return models.user.findAll();
};
在控制器中,数据打印为。
userService.getAllUsers().then(function (result) {
if (result != null) {
res.status(200).json({
status: "success",
data: result
});
} else {
res.status(404).json({
status: "fail",
data: "No data found"
});
}
}