首页 > 解决方案 > NODE.JS、Express、mySQL2:在另一个对象中附加一个对象时出现问题

问题描述

我在尝试将查询结果添加到对象时遇到问题。我是 Node 和 Express 的新手,所以如果我犯了一些愚蠢的错误,我深表歉意。当我试图让它发挥作用时,我一直在不停地阅读文档和观看视频。异步对我的大脑来说仍然很奇怪,所以我确定我做错了,我放置的功能似乎是错误的,我非常感谢您知道的任何视频或文章,这些视频或文章也可以帮助我理解哈哈!

基本上我有一个称为阶段的表,用户可以在其中添加或删除阶段。我正在拉动所有阶段,然后尝试将属于这些阶段的项目添加为对象数组。

好的,这里是代码:

var myStages = []; //Global variable to hold stages.

//Get all the Stages
app.get('/', (req, res) => {

    pool.getConnection((err, connection) => {
        if(err) throw err;
        console.log(`Connected as ID ${connection.threadId}`);

        //Query
        connection.query('SELECT * FROM solarcrm_stages', (err, rows) => {
            connection.release();

            if(!err) {
                getProjects(rows);
            } else {
                console.log(err);
            }
        })
        function getProjects(stages) {
            myStages = stages;

            Object.entries(myStages).forEach(entry => {
                const[key] = entry;

                connection.query('SELECT * FROM project WHERE iProjectStage = ?', [myStages[key]['iStageID']], (err, rows) => {
                    connection.release();

                    if(!err) {
                        myStages[key]['Projects'] = rows;
                        console.log(myStages);     //Projects shows up as 'Projects: [ [TextRow] ]'            
                    } else {
                        console.log(err);
                    }
                });
            });
        }
    })
})

我得到的当前结果是,第 1 阶段有项目应该出现但显示 [TextRow],第 2 阶段应该是空的:

[

TextRow {

iStageID: 1,

sStageName: 'Stage1',

sStateIcon: 'null',

bActive: 1,

iOrderID: 1,

sStageDesc: null,

Projects: [ [TextRow] ]

},

TextRow {

iStageID: 2,

sStageName: 'Stage 2',

sStateIcon: 'null',

bActive: 1,

iOrderID: 2,

sStageDesc: null,

Projects: []

}

]

非常感谢您提供的任何帮助或指导。

标签: javascriptnode.jsjsonexpressmysql2

解决方案


推荐阅读