![](/img/trans.png)
[英]get the last insert id in node.js and pass it to a second query
[英]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.