我刚刚开始学习node.js并试图从MySQL获取查询结果并将它们发送到ejs文件。我原来的app.js看起来像这样。
这是我原来的app.js:
var app = express();
var client = mysql.createConnection({
user: 'user',
password: '',
database: 'DB_practice'
});
app.get('/', function(request, response){
var result;
fs.readFile('list.ejs', 'utf8', function(error, data){
client.query('SELECT * FROM test', function(error, results){
result = results;
console.log("Query results(inside): " + JSON.stringify(results));
});
console.log("Query results(outside): " + JSON.stringify(results));
response.render(__dirname + '/list', {data: result} );
});
});
但是我注意到在client.query()块之外使用render()方法并没有按顺序执行代码。 console.log("查询结果(内部):" + JSON.stringify(results)); line以数组形式打印结果。但是当我在外面打印它时(console.log("查询结果(外部):" + JSON.stringify(results));),它返回undefined,这意味着"内部& #34;打印功能在" outside"之后执行。打印功能。所以我尝试将render()放在查询块中:
app.get('/', function(request, response){
var result;
fs.readFile('list.ejs', 'utf8', function(error, data){
client.query('SELECT * FROM test', function(error, results){
result = results;
response.render(__dirname + '/list', {data: results} );
console.log("Query results(inside): " + JSON.stringify(results));
});
console.log("Query results(outside): " + JSON.stringify(results));
});
});
抱怨我在list.ejs中传递查询结果的变量是未定义的。这是list.ejs中的部分:
<script type='text/javascript'>
var row =<%-JSON.stringify(data)%>
</script>
<% row.forEach(function(item, index){ %>
<tr>
<td><a href="/delete/<%= item.id %>">DELETE</a></td>
<td><a href="/edit/<%= item.id %>">EDIT</a></td>
<td><%= item.id %></td>
<td><%= item.name %></td>
<td><%= item.phone_no %></td>
</tr>
<% }); %>
它表示行未定义。
我几天都在努力解决这个问题。任何帮助将不胜感激。
答案 0 :(得分:0)
只需使用以下代码更新您的list.ejs
-
<强> list.ejs 强>
<% data.forEach(function(item, index){ %>
<tr>
<td><a href="/delete/<%= item.id %>">DELETE</a></td>
<td><a href="/edit/<%= item.id %>">EDIT</a></td>
<td><%= item.id %></td>
<td><%= item.name %></td>
<td><%= item.phone_no %></td>
</tr>
<% }); %>
代码中的任何内容&lt;% - %&gt;将使用未转义的HTML数据打印输出。