首先,我需要告訴你,我對nodejs,套接字流,angularjs和JavaScript的奇觀一般都很陌生。我來自Java背景,這可能解釋我對做異步事情的正確方式的無知。在rpc動作中將套接字流異步調用到mysql
爲了玩弄我從americanyak安裝ss-angular-demo的東西。我現在的問題是,Rpc似乎是一個同步接口,而我的調用mysql數據庫有一個異步接口。如何在Rpc調用後返回數據庫結果?
這裏是我做的,到目前爲止有socketstream 0.3:
在app.js我成功告訴SS,讓我的mysql數據庫連接,通過將ss.api.add('coolStore',mysqlConn);
在那裏在正確的地方(as explained in the socketstream docs)進行訪問。我用的是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上的第一個問題。
謝謝!噢,我的......畢竟是那麼簡單。 – luksch 2013-04-07 12:23:18