私はちょうどnode.jsの学習を始め、MySQLからクエリ結果を取得してejsファイルに送信しようとしていました。私の元のapp.jsはこのように見えました。MySQLから.ejsへのクエリ結果の送信
ここに私のオリジナル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));行は結果を配列形式で細かく出力します。しかし、私は外部(console.log( "クエリ結果(外部):" + JSON.stringify(results));)の外側に "inside"プリント関数が "outside"の後に実行されることを意味するundefinedを返します。印刷機能。だから、私は、次のようなクエリ・ブロック内のレンダリング()を確定しようとした:
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));
});
});
Iは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>
<% }); %>
それは行が定義されていないと言います。
私はこれを数日間苦労してきました。どんな助けでも大歓迎です。
@ user3369873、これはあなたの問題を解決するのに役立ちます。 –