2017-03-06 4 views
0

Node.jsを使用してAngular UniversalプロジェクトでMySQLデータベースに簡単なリクエストを行います。非同期Node.jsがAngular Universalで要求します。サーバーレンダリングが動作しなくなる

router.route('/newvideos') 
      .get(function(req, res) { 

      var mysql = require('mysql'); 

      var connection = mysql.createConnection({ 
       host  : 'localhost', 
       user  : 'root', 
       password : 'root', 
       database : 'myDB', 
       port: '8889' 
      }); 

      connection.connect(function(err) { 
       if (err) { 
       console.log("Error connecting to DB: " + err); 
       throw err; 
       } 
      }); 

      connection.query("SELECT * FROM table", function(err, rows, fields) { 
       if (err) { 
       console.log("Error executing query: " + err); 
       throw err; 
       } 

       connection.end(); 

       setTimeout(function() { 
       res.json(rows); 
       }, 0); 
     }); 

    }) 

データは受信されますが、HTMLテンプレートには表示されません。私は参照してください:

<!--template bindings={}--> 

アングルユニバーサルは、データベースからの要求からデータを受信するのを待たないようです。

誰かが問題を解決する方法を知っている場合は、アドバイスをいただければ幸いです。 ありがとうございます。

+1

'connection.connect'のコールバックで' connection.query'を呼び出す必要があります。 – Sangharsh

答えて

0

正しい方法は、それが

router.route('/newvideos').get(function(req, res) { 
    var mysql = require('mysql'); 

    var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : 'root', 
    database : 'myDB', 
    port: '8889' 
    }); 

    connection.connect(function(err) { 
    if (err) { 
     console.log("Error connecting to DB: " + err); 
     throw err; 
    } 

    connection.query("SELECT * FROM table", function(err, rows, fields) { 
     if (err) { 
     console.log("Error executing query: " + err); 
     throw err; 
     } 
     connection.end(); 

     return res.json(rows); 
    }); 
    }); 
}); 
+0

ありがとうございます。しかし、それは問題を解決しません。 –

0

私は、サーバーレンダリングは非同期リクエストによるものではない動作が停止することを発見したことができません。私の場合、Zone.jsに依存します。この場合

私は警告受け取ったとして角度が尋ねZone.jsインストール:

[email protected] requires a peer of [email protected]~0.6.21 but none was installed. 

をだから私は、適切Zone.jsをインストール:

npm install [email protected] 

このインストールするための理由は、ということでしたが私はそれがなければ、MySQLへのすべての要求は行っていないことがわかった。エラーが発生しました。

私は適切なZone.jsをインストールした後、私はMySQLからデータを取得することができました。

BUT!この場合、サーバーレンダリングが機能しなくなることがわかりました。データベースに接続せずにJSONデータを返しても機能しません。

だから私はいくつかのテストを行っていると私は、次のコマンドを実行している場合ことを発見した:

npm install zone.js 

を私はMySQLへの接続なしでのみJSONデータを返す場合、サーバーレンダリングが正常に動作します。ただし、次のエラーは、このケースでは、データベースへの接続時に発生します。

TypeError: Cannot read property 'on' of undefined 
     at Protocol._enqueue (/Applications/MAMP/htdocs/Angular2/myproject/node_modules/mysql/lib/protocol/Protocol.js:152:5) 
... 

は、今私は、サーバーのレンダリングやデータベースへの接続作業のいずれかを持っているZone.jsのバージョンによって異なります。一度に両方ではありません。誰かが何をすべきか分かっているなら、私は助けに感謝します。ありがとうございました。

関連する問題