Node.js和Heroku,如何插入第二个查询?

时间:2016-11-10 10:00:50

标签: javascript node.js heroku

我正在使用Node.js和Heroku;我对以下代码有疑问,我在网上找到了:

app.get('/db', function (request, response) {
  pg.connect(process.env.DATABASE_URL, function(err, client, done) {
    client.query('SELECT * FROM test_table', function(err, result) {
      done();
      if (err)
       { console.error(err); response.send("Error " + err); }
      else
       { response.render('pages/db', {results: result.rows} ); }
    });
  });
});

这列出了test_table表的内容,但我也想执行以下查询:

*“INSERT INTO test_table(fieldOne,fieldTwo)VALUES(MAX(fieldOne)+1,MAX(fieldTwo) 2)”

如何在上面的代码中集成它?

这是我尝试过的,但没有成功:

app.get('/db', function (request, response) {
  pg.connect(process.env.DATABASE_URL, function(err, client, done) {
    client.query('SELECT * FROM test_table', function(err, result) {
      done();
      if (err)
       { console.error(err); response.send("Error " + err); }
      else { 
        response.render('pages/db', {results: result.rows} ); 
        client.query("INSERT INTO test_table  (id, name) VALUES (MAX(id)+1,'TEST')", function(err, result) {done();});
      }
    });
  });
});

我不知道这最后一块代码是否正确或完全错误。 但我只能说DB表(test_table)没有更新。

2 个答案:

答案 0 :(得分:0)

如果它可以帮助其他人,我在这里发布我为使我的代码工作所做的更改:

app.get('/db', function (request, response) {
  pg.connect(process.env.DATABASE_URL, function(err, client, done) {
    client.query('SELECT * FROM test_table', function(err, result) {
      done();
      if (err)
       { console.error(err); response.send("Error " + err); }
      else { 
        response.render('pages/db', {results: result.rows} ); 
        client.query("INSERT INTO test_table  (id, name) VALUES ((SELECT MAX(id) FROM test_table)+1,'TEST')", function(err2, result2) {done();});
      }
    });
  });
});

关于这一点必须有其他的事情要说,但至少它现在有效。

答案 1 :(得分:-1)

这个答案意味着一些开发人员尝试使用Node.js时遇到了同样的问题。 这是一个tiny site我作为一个用例,为了得到一些练习。我将在此后展示相关代码。它希望以后能帮助别人。

阅读Getting Started on Heroku with Node.js我抓住了这个主题。

我是按照上述文件中的建议从this开始的。

以下是我对顶级index.js文件所做的相关更改:

app.get('/', function (request, response) {
  pg.connect(process.env.DATABASE_URL, function(err, client, done) {
    client.query('SELECT * FROM Prime_List ORDER BY rank', function(err, result) {
      done();
      if (err)
       { console.error(err); response.send("Error " + err); }
      else { 
         client.query('SELECT * FROM Leap_List ORDER BY rank', function(err, resultLeap) {
           done();
           if (err) {console.error(err); response.send("Error " + err);}
           else {
             response.render('pages/index', {results: result.rows, resultsLeap:resultLeap.rows, ua:agent} );
             lastPrime=result.rows[result.rows.length-1].prime;
             newPrime=getNextPrime(result.rows);
             client.query("INSERT INTO Prime_List (rank,prime) VALUES ((SELECT MAX(rank) FROM Prime_List)+1,"+newPrime+")", 
             function(err, result2) {
              done();
              if (err){ console.error(err); response.send("Error " + err); }
              else {
                client.query("SELECT COUNT(*) FROM Leap_List WHERE (leap="+(newPrime-lastPrime)/2+")",
                function(err, resultCnt) {
                  done();
                  if (err) { console.error(err); response.send("Error " + err); }
                  else {
                    if (resultCnt.rows[0].count==1) {
                      client.query("UPDATE Leap_List SET count=count+1 WHERE (leap="+(newPrime-lastPrime)/2+")",
                        function(err, resultUpd) {
                          done();
                          if (err) { console.error(err); response.send("Error " + err); }
                      });
                    } else /*(resultCnt[0]==0)*/ {
                      leapQuery="INSERT INTO Leap_List (rank,leap,initial,final,count) VALUES";
                      leapQuery+=" ((SELECT MAX(rank) FROM Leap_List)+1,";
                      leapQuery+=(newPrime-lastPrime)/2+",";
                      leapQuery+=lastPrime+",";
                      leapQuery+=newPrime+",";
                      leapQuery+="1)";
                      client.query(leapQuery,
                      function(err, resultUpd) {
                        done();
                        if (err) { console.error(err); response.send("Error " + err); }
                      });
                    }}});
              }});
           }});
      }});
  });
});


function getNextPrime(primeList) {
  var resultPrime = primeList[primeList.length-1].prime + 2;

  do {for (i=1; i<primeList.length; i++) {
        if (primeList[i].prime*primeList[i].prime>resultPrime) return resultPrime;
        if (resultPrime%primeList[i].prime == 0) break;
      }
      resultPrime+=2;
  } while (true);
}

以下是我对views / pages / index.ejs文件(使用表格的版本)所做的相关修改:

第一张表(素数):

<table cellspacing=5>
    <% var npr=15; i=0; results.forEach(function(r) {
        if ((i==90)&&(npr==15)) { npr--; i=0; %> </table><br/><table> <% }
        if ((i==70)&&(npr==14)) { npr--; i=0; %> </table><br/><table> <% }
        if (i%npr==0) { %> <tr align=right> <% } %>
        <td bgcolor=#FFFF66><%= r.rank %></td><td bgcolor=#66FF66><font color=#000080><%= r.prime %></font></td>
        <% if (i%npr==(npr-1)) { %> </tr> <% } %>
        <% i++; %>
    <% }); %>
</table>

第二张表(跳跃式):

<table cellspacing=5>
<tr align=center>
<td bgcolor=#FFAAFF>Rank</td><td bgcolor=#FFAAFF>Leap</td>
<td bgcolor=#FFAAFF>Count</td><td  bgcolor=#FFAAFF colspan=2>First case</td>
</tr>
    <% var npr=5; i=0; total=0;
      resultsLeap.forEach(function(r) { 
        total+=r.count; %>
        <tr align=right>
        <td bgcolor=#FFFF99><%= r.rank %></td>
        <td bgcolor=#EEDD88><font color=#000080><%= r.leap %></font></td>
        <td bgcolor=#EEDD88><font color=#000080><%= r.count %></font></td>
        <td bgcolor=#88EEDD><font color=#000080><%= r.initial %></font></td>
        <td bgcolor=#88EEDD><font color=#000080><%= r.final %></font></td>
       </tr>
        <% i++; %>
    <% }); %>
<tr align=right>
<td bgcolor=#FFAAFF colspan=2>Total :</td>
<td bgcolor=#FFAAFF><%= total %></td>
</tr>
</table>

如果您正好阅读本文并成为Node.js的专家,请留下有关我在上述代码中所采用方式的建议或意见。