首先,我需要告诉你,我对 nodejs、socketstream、angularjs 和 JavaScript 的奇迹非常陌生。我来自 Java 背景,这可能解释了我对异步做事的正确方式的无知。
为了玩弄我从Americanyak安装了ss-angular-demo的东西。我现在的问题是 Rpc 似乎是一个同步接口,而我调用 mysql 数据库有一个异步接口。如何在调用 Rpc 时返回数据库结果?
这是我到目前为止使用 socketstream 0.3 所做的:
ss.api.add('coolStore',mysqlConn);
在 app.js 中,我成功地告诉 ss 允许通过在正确的位置放置我的 mysql 数据库连接来访问(如 socketstream 文档中所述)。我使用 mysql npm,所以我可以在 Rpc 中调用 mysql
服务器/rpc/coolRpc.js
exports.actions = function (req, res, ss) {
// use session middleware
req.use('session');
return {
get: function(threshold){
var sql = "SELECT cool.id, cool.score, cool.data FROM cool WHERE cool.score > " + threshold;
if (!ss.arbStore) {
console.log("connecting to mysql arb data store");
ss.coolStore = ss.coolStore.connect();
}
ss.coolStore.query(sql, function(err, rows, fields) {
if(err) {
console.log("error fetching stuff", err);
} else {
console.log("first row = "+rows[0].id);
}
});
var db_rows = ???
return res(null, db_rows || []);
}
}
控制台按预期记录了我的数据库条目的 ID。但是,我不知道如何使 Rpc 的 return 语句返回我的查询行。解决此类问题的正确方法是什么?
谢谢你的帮助。请对我友好,因为这也是我在stackoverflow上的第一个问题。