查询执行时的奇怪行为

时间:2013-09-06 11:26:29

标签: javascript sql node.js asynchronous websocket

我正在使用websockets和nodejs 0.10.12以及node-postgre 2.2.0将数据从服务器发送到客户端。

服务器获取在客户端上单击的对象的id,并根据该id执行查询(是一个int)。

我想获得这个对象的一些文本数据,以及一些图像的名称。只是名字(image01.jpg),而不是文件。

数据库的结构如下:有两个表,pins(对象)和multi(代表多媒体)。 multi中有一列名为m_pins,代表pins的ID。所以我可以连接多个属于哪个pins。因此multi 2,3,4,5,6属于pins 2,如果它们在m_pins中有2个。

根据这些事实,请检查代码

client.connect();var query = client.query('SELECT pins.p_name, type.t_name, era.e_name, controller.c_name, multi.m_name FROM pins,era, type, controller, multi WHERE type.t_id=pins.p_type AND era.e_id=pins.p_era AND controller.c_id=pins.p_controller AND multi.m_pins =pins.p_id AND pins.p_id ='+eoid)//eoid came from client

query.on("row", function (row, result) {result.addRow(row);});

query.on("end", function (result) {
//get all the images, now that query comleted
var mnm=[];
            for (var i=0; i<result.rows.length; i++)
            {mnm.push(result.rows[i].m_name);}

//get other data...we dont need the "for" now, its the first element of every table, since its about just one object

                  var name = result.rows[0].p_name; 
           var ty = result.rows[0].t_name;
           var er = result.rows[0].e_name;
                    var cn = result.rows[0].c_name;



//send to user
connection.send(JSON.stringify({name:name,ty:ty, er:er, cn:cn,mnm:mnm}));

    client.end();
});

对我来说很正常。但是不起作用。在控制台中我得到Cannot read property 'p_name' of undifined。关于这一行var name = result.rows[0].p_name;

奇怪的是,如果我删除关于multi表的每一个,那么工作正常。

我尝试了很多替代语法,但无法修复它。

感谢您的耐心

0 个答案:

没有答案