我正在使用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)没有更新。
答案 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的专家,请留下有关我在上述代码中所采用方式的建议或意见。