2016-11-10 1 views
1

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) 가치 (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)이 업데이트되지 않는다는 것입니다. 그것은 다른 사람 도움이 될 경우

+0

fieldOne 및 fieldTwo 란 무엇입니까? 쿼리 매개 변수 또는 POST 요청에서/db로 가져올 수 있습니까? – lkostka

+0

네, 그것들은 test_table에있는 필드의 예일 뿐이며, 여러분은 그것들을 int 값을 포함하는 것으로 생각할 수 있습니다. 나는이 쿼리를 코드 안에 어떻게 통합 할 수 있는지 알아 내려고한다. 몇 가지 옵션이 있다고 가정합니다. 먼저 옵션을 시작해야합니다. fieldOne 및 fieldTwo는 내가 어디에서나 가져올 수없는 쿼리의 일부입니다. – Michel

+0

일단 모든 레코드가 있으면이 쿼리를 수행하려면 else '블록'에 client.query를 추가하지 않는 이유는 무엇입니까? – lkostka

답변

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

이 답변은 Node.js를 사용하려고하는 일부 개발자가 내가 한 것과 같은 질문을 던진 경우를위한 것입니다. 여기는 tiny site입니다. 유스 케이스로 만들었습니다. 이후 관련 코드를 보여 드리겠습니다. 나중에 누군가를 도울 수있을 것입니다.

독서 Getting Started on Heroku with Node.js 나는이 주제에 대해 내 손을 잡았다.

위에서 언급 한 문서에서 제안한대로 this부터 시작했습니다. 여기

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

가 (테이블을 사용하여 버전) I의 의견/페이지/index.ejs 파일에 관련 수정 사항은 다음과 같습니다 : 여기

내가 상단하는 index.js 파일에 관련 변경입니다

먼저 표합니다 (소수) :

<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의 전문가가 되셨다면 위 코드에서 수행 한 방법에 관해 조언이나 의견을 남겨 주시기 바랍니다.

관련 문제