【问题标题】: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"
                });
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-01
      • 2017-04-11
      • 1970-01-01
      • 2011-06-18
      • 2021-09-18
      • 1970-01-01
      • 2011-05-02
      • 2020-10-30
      相关资源
      最近更新 更多