Javascript 执行查询时的奇怪行为
我使用WebSocket和nodejs 0.10.12以及node postgre 2.2.0将数据从服务器发送到客户端 服务器获取在客户端上单击的对象的id,并基于该id(是一个int)执行查询 我想获取这个对象的一些文本数据,以及一些图像的名称。只是名称(image01.jpg),而不是文件 数据库的结构是这样的:有两个表,Javascript 执行查询时的奇怪行为,javascript,sql,node.js,asynchronous,websocket,Javascript,Sql,Node.js,Asynchronous,Websocket,我使用WebSocket和nodejs 0.10.12以及node postgre 2.2.0将数据从服务器发送到客户端 服务器获取在客户端上单击的对象的id,并基于该id(是一个int)执行查询 我想获取这个对象的一些文本数据,以及一些图像的名称。只是名称(image01.jpg),而不是文件 数据库的结构是这样的:有两个表,pins(对象)和multi(表示多媒体)。multi中有一列,名为m_pins,表示pins的id。因此,我可以连接multi所属的引脚。因此,multi2,3,4,5
pins
(对象)和multi
(表示多媒体)。multi
中有一列,名为m_pins
,表示pins
的id。因此,我可以连接multi所属的引脚
。因此,multi
2,3,4,5,6属于pin
2,如果它们有两个inm_pin
根据这些事实,请检查代码
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();
});
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和pins.p_id='+eoid)//eoid来自客户端
on(“row”,函数(row,result){result.addRow(row);});
查询.on(“结束”,函数(结果){
//现在查询已完成,获取所有图像
var mnm=[];
对于(var i=0;iIs)该javascript?您的查询位于多行字符串中,这在javascript中是不可能的。@ClodoaldoNeto Yes是javascript。通过“多行”你是说这行SELECT pins.p\u name,type.t\u name,…
有间隙吗?在我的原始代码中没有间隙,我把间隙放在这里以便更可读。我的错误。我将删除间隙。@slevin你需要确保“行”事件在“结束”之前绝对触发事件,否则result.row
不会被填充,因此result.row[0]
的计算结果为未定义的@dark\u。我认为这与查询结束后的for
有关。因为我的语法与node postgre模块的创建者建议的语法类似(请参阅)。无论如何,您能否更具体地描述一下行在结束前触发的场景?我如何实现它?@slevin这是“行”填充result.rows
的事件,因此如果查询未返回任何行,则不会触发事件。若要调试,可以在console.log
行内事件-若要查看是否触发,请在“end”事件中添加一个console.log(result.rows.length)
,以查看返回的行数