【问题标题】:cannot pass javascript values from query to websocket无法将 javascript 值从查询传递到 websocket
【发布时间】:2013-09-08 16:01:22
【问题描述】:

我使用 nodejs 0.10.12 和 node-postgre 2.2.0

我创建了一个函数,其中包含两个不同的查询,它们执行良好并返回结果。

查询执行后,我想收集两个查询的所有结果并通过 websockets 将它们发送到客户端。

我无法将查询中的值传递给 websocket。在客户端,当我提醒传入数据时,我得到“未定义”。我虽然将变量设置为全局变量,但仍然没有

有什么想法吗?

提前致谢

这是代码

//set all vars as globals, at the start of the doc
 var mnm=[]; var name;

//inside the function

//query 1
client.connect();
var query = client.query('SELECT pins.p_name  FROM pins WHERE  pins.p_id ='+eoid)

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

query.on("end", function (result) {  

    for (var i=0; i<result.rows.length; i++)
    {name = result.rows[0].p_name;}

});

//query 2
var query2 = client.query('SELECT m_name  FROM multi WHERE m_pins ='+eoid)

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

query2.on("end", function (result) { 
      for (var i=0; i<result.rows.length; i++)
     {mnm.push(result.rows[i].m_name);}
client.end();
});


//so , now gather "name" from the first query and "mnm" from the second and send them to client
connection.send(JSON.stringify({name:name , mnm:mnm}));

编辑 现在我意识到如果我第一次执行此代码,客户端警报未定义。第二,提醒我选择的上一个对象的数据。如果我单击 object1,我会变得不确定。如果我单击对象 2,我会得到对象 1。请指教

【问题讨论】:

  • 欢迎来到 async 的美妙世界!你不能那样做。
  • 此外,此代码极易受到 SQL 注入攻击。
  • @SLaks 你好。我刚刚编辑了这个问题。看,整个混乱开始here。如果pins 没有与之相关的m_pins,则整个查询将失败。所以我想实现两个不同的查询。哦,拜托,必须有另一种方式。我是新手,我正在为此工作一周。请告诉我,还有其他方法
  • @slevin 您也可以在第一个的“结束”事件中进行第二个查询;)

标签: javascript node.js websocket


【解决方案1】:

基于 Mathieu 'OtaK' Amiot 的简单但有效的想法,我在第一个的“结束”事件中进行了第二个查询。

这里是代码

client.connect();
var query = client.query('SELECT pins.p_name  FROM pins WHERE  pins.p_id ='+eoid)

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

query.on("end", function (result) { 

for (var i=0; i<result.rows.length; i++)
    {name = result.rows[0].p_name;}

       var query2 = client.query('SELECT m_name  FROM multi WHERE m_pins ='+eoid)
       query2.on("row", function (row, result) {result.addRow(row);});
         query2.on("end", function (result) { 
           for (var i=0; i<result.rows.length; i++)
           {mnm.push(result.rows[i].m_name);}
        connection.send(JSON.stringify({name:name , mnm:mnm}));
        client.end();
      });//inner query "on end"

}); //outter query "on end"

感谢 Mathieu 的奇妙创意。现在工作正常。

【讨论】:

    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2018-03-23
    • 2015-07-01
    • 2018-02-22
    相关资源
    最近更新 更多