簡體   English   中英

Node.js和Heroku,如何插入第二個查詢?

[英]Node.js and Heroku, how to insert a second query?

我正在使用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)沒有更新。

萬一它可能對其他人有幫助,請在此處發布為使代碼有效所做的更改:

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的開發人員遇到與我相同的問題。 這是我制作的一個小站點 ,作為用例,以進行一些練習。 以后我將顯示相關代碼。 希望以后能對某人有所幫助。

閱讀有關Node.js的Heroku入門指南,我已開始嘗試該主題。

我從開始這個上面提到的文件中提出。

這是我對頂級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的專家,請留下與我在上面代碼中所做的方式有關的建議或評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM