【问题标题】:How to fetch complete data from mysql in nodejs callbacks function如何在nodejs回调函数中从mysql获取完整数据
【发布时间】:2023-03-03 01:49:02
【问题描述】:

var mysql = require("mysql");
var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'nodejs'
});

exports.players_list = function(req, res) {
    
    var data = {title: "", res: {}};
    if (authenticate(req, res)) {

        results_aaa(function(result) {
            console.log(result);
            res.render('players/players', {title: 'Players List', res: result});
        });
    } else {
        req.session.error = 'Please login to continue.';
        res.redirect('/login');
    }
};

function results_aaa(callback) {
    teams(function(res) {
        callback(res)
    });
}

function teams(callback) {
    var query = connection.query("select * from team", function(err, result, fields) {
        for (var index in result)
        {
            players(result[index].id, function(results) {
                callback(results);
            });
        }
    });
}

function players(id, callback) {
    query("SELECT * FROM players where team = " + id, function(results) {
        callback(results);
    });
}

function query(sql, callback) {
    connection.query(sql, function(error, results, fields) {
        callback(results);
    });
}

我正在尝试将特定团队的数据与团队成员分组。 我得到了部分输出。但是如果我使用 console.log(),我可以在控制台中看到整个输出

控制台中的输出如下所示。

Express server listening on port 8081
[ { id: 2, player_name: 'Virat Kohli', team: '1' },
  { id: 4, player_name: 'A B DeVilliers', team: '1' },
  { id: 6, player_name: 'Chris Gayle', team: '1' } ]
GET /players 200 162ms - 638
[ { id: 7, player_name: 'Ajinkya Rahane', team: '2' },
  { id: 8, player_name: 'Shane Watson', team: '2' },
  { id: 9, player_name: 'Stuart Binny', team: '2' },
  { id: 10, player_name: 'Karun Nair', team: '2' },
  { id: 11, player_name: 'Sanju Samson', team: '2' } ]
[ { id: 1, player_name: 'Virender Sehwag', team: '3' },
  { id: 3, player_name: 'David Miller', team: '3' },
  { id: 5, player_name: 'Shaun Marsh', team: '3' } ]

jade 视图中仅显示 1 的团队 id。

而且所遵循的程序是否正确。我是节点 js 的新手。

提前致谢:)

【问题讨论】:

    标签: mysql node.js express pug


    【解决方案1】:

    这是因为您在收到第一个回调之后发送响应,即第 1 队的结果,而在您收到其他两个、第 2 和第 3 队的结果之前。

    在函数 teams() 中,使用

    if(index == result.length-1) { callback(results); }

    而不仅仅是

    回调(结果);

    for 循环内。

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 2019-10-17
      • 1970-01-01
      • 2011-11-13
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多