2017-03-06 58 views
0

我使用Node.js对Angular Universal项目中的MySQL数据库做了一个简单的请求。Angular Universal中的异步Node.js请求。服务器渲染停止工作

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.query'应该在'connection.connect'的回调中调用。 – 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获取数据。

但是!我发现服务器渲染在这种情况下停止工作。即使我没有连接到数据库而返回JSON数据,它也不起作用。

所以我做了一些测试,发现如果我做了下面的命令:

npm install zone.js 

那么如果我只返回JSON数据,而无需连接到MySQL服务器的渲染工作正常。但是连接到数据库,在这种情况下,在出现以下错误:

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的版本我有任一服务器渲染或数据库连接的工作。不是一次两个。如果有人知道该怎么做,我会感谢帮助。谢谢。