mysql - rpc 操作中对 mysql 的 socketstream 异步调用

标签 mysql node.js asynchronous socketstream

首先,我需要告诉你,我对 nodejs、socketstream、angularjs 和 JavaScript 的奇妙之处总体上还很陌生。我来自 Java 背景,这可能解释了我对异步处理的正确方法一无所知。

为了玩弄我从 americanyak 安装的 ss-angular-demo。我现在的问题是 Rpc 似乎是一个同步接口(interface),而我对 mysql 数据库的调用有一个异步接口(interface)。如何在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 上的第一个问题。

最佳答案

这不是同步的。当您的结果准备就绪时,您可以将它们发回:

exports.actions = function (req, res, ss) {

  // use session middleware
  req.use('session');

  return {
    get: function(threshold){
      ...
      ss.coolStore.query(sql, function(err, rows, fields) {
        res(err, rows || []);
      });
    }
  }
};

您需要确保始终从 RPC 函数调用 res(...),即使发生错误,否则您可能会收到悬空请求(客户端代码一直在等待)从未生成的响应)。在上面的代码中,错误被转发到客户端,因此可以在那里进行处理。

关于mysql - rpc 操作中对 mysql 的 socketstream 异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861879/

相关文章:

php将数组行重新排列成列以显示在表中

node.js - Gitlab CI 上的错误 : connect ECONNREFUSED 127. 0.0.1:5432

javascript - JQuery checkbox.prop ('checked' )总是返回 false 值

javascript - 被 fork 的 child_process 可以成为父进程并也 fork 新进程吗?

ios - iPhone - 异步 NSURLConnection HTTP 响应可能会干扰正在运行的进程吗?

c# - 如何从异步返回字符串

php - MySQL全连接三表

mysql - 如何在订购前添加数字到时间(MySQL)

在 jsp 中的两个不同表单上使用两个提交按钮时出现 Java 错误

ajax - 如何在不刷新页面的情况下将新的 HTML 数据从服务器推送到浏览器