2016-04-03 14 views
0

私はちょうど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> 
    <% }); %> 

それは行が定義されていないと言います。

私はこれを数日間苦労してきました。どんな助けでも大歓迎です。

答えて

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

<%タグ内の何か - %>はエスケープHTMLデータを出力に印刷します。

+0

@ user3369873、これはあなたの問題を解決するのに役立ちます。 –

関連する問題