【问题标题】:Sails + Braintree : Unable to send the transactions details to clientSails + Braintree:无法将交易详情发送给客户
【发布时间】:2016-03-03 16:12:58
【问题描述】:

我正在使用Sails JSBraintree 开发应用程序。我正在尝试发送客户过去的所有交易细节。

这是我的 getTransaction 操作

getTransaction: function(req, res) {
    var customerId = req.param('customerId');
    var gateway = setUpGateway();
    var stream = gateway.transaction.search(function(search) {
        search.customerId().is(customerId);
    }, function(err, response) {
        if (err) {
            return res.serverError(err);
        }          

        res.send(response);
    });
},

但问题是,如果我直接发送从 Braintree 服务器获得的响应,它会抛出 circular dependency error。所以,为了克服这个错误,我只从这样的响应中获取我需要的那些细节

getTransaction: function(req, res) {
        var customerId = req.param('customerId');
        var gateway = setUpGateway();
        var stream = gateway.transaction.search(function(search) {
            search.customerId().is(customerId);
        }, function(err, response) {
            if (err) {
                return res.serverError(err);
            }

            var transactions = [];
            response.each(function(err, transaction) {
                var temp = [];

                temp.push(transaction.id);
                temp.push(transaction.amount);
                temp.push(transaction.createdAt);
                transactions.push(temp);
            });

            res.send(transactions);
        });
    },

但是这里.each 函数正在异步执行,因此res.send 返回空数组。那么我应该怎么做才能返回用户所做的所有交易呢?

【问题讨论】:

    标签: javascript node.js sails.js braintree


    【解决方案1】:

    全面披露:我在 Braintree 工作。如果您还有任何问题,请随时联系我们的support 团队。

    迭代器异步执行是正确的。您应该使用 Node 的流语义来处理请求

    getTransaction: function(req, res) {
      var customerId = req.param('customerId');
      var gateway = setUpGateway();
      var transactions = [];
    
      var stream = gateway.transaction.search(function(search) {
        search.customerId().is(customerId);
      });
    
      stream.on('data', function (transaction) {
        transactions.push(transaction);
      });
    
      stream.on('end', function () {
        res.send(transactions);
      });
    },
    

    这将等到所有交易都处理完毕后再发送结果。

    This page 提供有关使用我们的 Node 客户端库和 Node 的 Stream API 进行搜索的更多信息。

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 1970-01-01
      • 2021-10-22
      • 2018-09-03
      • 1970-01-01
      • 2019-10-11
      • 2018-08-09
      • 2016-10-24
      • 2015-08-05
      相关资源
      最近更新 更多