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

Javascript Node.js和Heroku,如何插入第二个查询?,javascript,node.js,heroku,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 (er

我正在使用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_表的内容,但我还想执行以下查询:

*插入测试_表fieldOne,fieldTwo值MAXfieldOne+1,MAXfieldTwo2

如何将其集成到上面的代码中

以下是我尝试过但没有成功的东西:

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 table test_表没有更新。

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

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();});
      }
    });
  });
});

关于这一点,肯定还有其他的话要说,但至少现在它起作用了。

这个答案是为了防止一些开发人员试图接触Node.js时遇到与我相同的问题。 下面是我制作的一个用例,作为一个用例,以获得一些实践。我将在下文中显示相关代码。它希望以后能帮助别人

在阅读中,我掌握了这个主题

我从上面提到的文件中的建议开始

以下是我对top 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的专家,请就我在上述代码中的做法提出建议或意见。

fieldOne和fieldTwo是什么?您是从查询参数还是从POST request to/db获取它们的?是的,它们只是test_表中字段的示例,您可能认为它们包含一些int值。我正试图找出如何将这个查询集成到代码中。我想有几个选择,我需要从一个开始。fieldOne和fieldTwo是查询的一部分,我从任何地方都找不到。如果您想在拥有所有记录后执行此查询,为什么不在else“块”中添加client.query?好的。我想我已经试过了,但没有成功,我会再试一次,所以这可能是我不知道该怎么做的。我只是试了第二次,但没有成功。我还更新了我的帖子来反映这一点。我希望有人能给我指出正确的方向。