Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 执行查询时的奇怪行为_Javascript_Sql_Node.js_Asynchronous_Websocket - Fatal编程技术网

Javascript 执行查询时的奇怪行为

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

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

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

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

数据库的结构是这样的:有两个表,
pins
(对象)和
multi
(表示多媒体)。
multi
中有一列,名为
m_pins
,表示
pins
的id。因此,我可以连接multi所属的
引脚
。因此,
multi
2,3,4,5,6属于
pin
2,如果它们有两个in
m_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)
,以查看返回的行数