我对node.js的Angular Universal Project中的MySQL数据库进行了简单的请求。
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中。我只看到:
<!--template bindings={}-->
似乎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();
return res.json(rows);
});
});
});
我发现服务器渲染不再因异步请求而停止工作。在我的情况下,这取决于区域。
在这种情况下,我在收到警告时安装了Angular问的区域:
angular2-universal@2.1.0-rc.1 requires a peer of zone.js@~0.6.21 but none was installed.
所以我安装了适当的区域:
npm install zone.js@0.6.21
此安装的原因是,我发现没有它的所有请求都没有进行。发生错误。
安装了正确的区域后,我能够从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的版本。我具有服务器渲染或工作连接到数据库。不是一次。如果有人知道该怎么办,我会感谢帮助。谢谢。