未定义的push to array-使用expressjs和mysql的基本应用程序

svmlkihl  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(273)

首先,我得告诉你我在这个“宇宙”里是个绝无仅有的傻瓜。我正在使用:expressjs、mysql、body parser、express session、ejs模板在node中创建一个基本的contacts应用程序。
我的数据库由3个表组成:
用户(用户名、名、名、用户名、密码)
联系人(ct\ U id,名字,第二个名字,电话号码。)
用户\联系人(user\ id,ct\ id)-->用户和联系人的外键
我想在/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\u parse\u error:您的sql语法有错误;
..当queryarray.length>1时
我搜索了一些关于多语句查询的内容,但我不知道如何解决它。

编辑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
        })
     });

但现在我的数组包含未定义的对象??有什么解决办法吗?也许是关于范围的?
我的结果:
向阵列发送数据
向阵列发送数据
[未定义,未定义]
创建数据
创建数据
在创建对象之前,我将其推入数组。怎么可能?

gj3fmq9x

gj3fmq9x1#

1797,
我注意到你有几个小的查询获取一个给定用户的联系信息。您可以通过将查询组合成单个查询来简化代码。通常情况下,一个大查询效率更高(而且更易于维护)。我在使用连接。更多信息请点击此处。

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
    });
});

相关问题