未定义推送到数组 - 使用 ExpressJs 和 MySQL 的基本应用程序

Undefined push to array - Basic Application using ExpressJs and MySQL

首先,我必须告诉你我在这个“宇宙”中是个菜鸟。我正在使用:ExpressJs、MySql、Body-Parser、Express-session、Ejs 模板,用于在 Node.

中创建基本联系人应用程序

我的数据库由 3 个表组成:

我想在 /myProfile 页面上列出有关用户及其联系人的所有详细信息。 我不知道如何处理 select 查询。

所以,在一些文档之后我这样做了:

conn.query('SELECT * FROM user_contacts WHERE user_id= ?', req.session.user_id, function (err, result) { 
        if(err) throw err;
        console.log(result);
        var queryArray = "";
        for(var i = 0; i < result.length; i++){
            queryArray += `SELECT * FROM contacts WHERE ct_id= ${result[i].ct_id}; `;
        }
        console.log(queryArray);
         conn.query(queryArray, function (err, result) { 
             if(err) throw err;
             console.log(result);
             res.render('myProfile/contacts', {
                title: `${req.session.user_nickname}'s Contacts`,
                data:   result
            });
          }); 
     });

但是我有一个错误

ER_PARSE_ERROR: You have an error in your SQL syntax;

..当 queryArray.length > 1

我搜索了一下,是关于Multiple statement queries的东西,但是我不知道怎么解决。

编辑 2:

我修改我的代码..

conn.query('SELECT * FROM user_contacts WHERE user_id= ?', req.session.user_id, function (err, result) { 
        if(err) throw err;
        var datas = [];
        for(var i = 0; i < result.length; i++){
            getContacts    =   function(query){
                conn.query(query, function (err, result) { 
                    console.log('Creating data');
                    data = {
                        user:       req.session.user_nickname,
                        contact:{
                            ct_firstName:   result[0].ct_firstName,
                            ct_SecondName:  result[0].ct_SecondName,
                            ct_PhoneNumber: result[0].ct_PhoneNumber
                        }   
                    }
                    return data;
                 });
            }
            console.log('Send data to array');
            datas.push(getContacts(`SELECT * FROM contacts WHERE ct_id = ${result[i].ct_id}`));
        }
        console.log(datas); // [ undefined, undefined ] 
        res.render('myProfile/contacts',{
            title:  `${req.session.user_nickname}'s profile`,
            data:   datas
        })
     });

但是现在我的数组包含未定义的对象??任何解决方案? 也许与范围有关?

我的结果:

我在创建对象之前将其推送到数组。怎么可能?

1797,

我注意到您有几个小查询可以获取给定用户的联系信息。您可以通过将查询组合成一个查询来简化代码。通常 1 个大查询效率更高(而且更易于维护)。我正在使用连接。 More info here.

const contacts = [];

const query = "
SELECT c.*
FROM user_contact uc
JOIN contact c ON uc.contact_id = c.contact_id
WHERE uc.user_id = ?
GROUP BY c.contact_id
";

conn.query(query, req.session.user_id, (err, results) => {
    if (err) throw new Error(err);

    // it seems that this could just be 'contacts = results' since they
    // have the same structure
    contacts = results.map(result => {
        return {
            ct_firstName:   result[0].ct_firstName,
            ct_SecondName:  result[0].ct_SecondName,
            ct_PhoneNumber: result[0].ct_PhoneNumber
        };
    });

    res.render('myProfile/contacts',{
        title: `${req.session.user_nickname}'s profile`,
        data: contacts
    });
});