使用JS对象查询MySQL,并返回[对象对象]作为表名

时间:2018-10-23 14:58:17

标签: javascript mysql node.js electron

我正在构建一个查询MySQL数据库,获取表,字段,字段数据类型和条目的程序,并将其作为单个对象返回,以供以后将MySQL数据视为表使用。

这是构建对象的外观:

    {
    `Table_Name`: {
        Title: `Table_Name`,
        Fields: {
            `Field Name`: `Datatype`
        },
        RowData: []
    }

}

获取表的查询很好,但是获取行数据的查询却没有。查询功能如下:

    function getRows(){

        let secondpromises = [];

        secondpromises.push(
            new Promise((resolve, reject) => {
                for(x in Tables){
                    Connect_SQL(SQLcreds, w_newSconn, (conn) => {
                        conn.query(`SELECT * FROM ${Tables[x]}`, (err, results) => {
                            if(err){
                                console.log(err);
                                reject(err);
                            }else{
                                for(r in results){

Tables[`${Tables[x].Title}`].RowData.push(results[r]);
                                }
                                resolve(results);
                            }
                        });
                    });

                    if(x == Tables.length - 1){
                        Promise.all(secondpromises).then(() => {
                            if(w_newSconn){
                                w_newSconn.close();
                                w_newSconn = null;
                            }
                            console.log(Tables);
                        });
                    }
                }
            })
        );
    }

错误来自conn.query()。抛出错误,指出我的SQL语法中存在错误:

SELECT * FROM [object Object]

我了解原因,而且我敢肯定有一种方法可以通过JSON.Stringify()来解决,但是必须有一种更简单的方法。我已经尝试过创建一个像这样的变量:

let objArray = Object.keys(Tables)

但是它仍然返回了[object Object],我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

Tables[x]是一个对象。您需要从中获取表名。

conn.query(`SELECT * FROM ${Tables[x].Title}`, (err, results) => {

看起来属性名称与标题相同,因此您可以执行以下操作:

conn.query(`SELECT * FROM ${x}`, (err, results) => {

答案 1 :(得分:0)

我最终在循环中创建了一个变量

let table = keys[x]

可以解决问题,无论出于什么原因,$ {keys [x]}返回的都是未定义的,但是变量返回了表名。从理论上讲,我可以将for循环更改为

for(x in Tables)

和x将返回标题,所以我可以回去以这种方式重写它。谢谢。