【问题标题】:Calling a third party API in loopback after saving data保存数据后在环回中调用第三方API
【发布时间】:2016-09-29 20:53:17
【问题描述】:

我刚刚开始使用环回。我们正在环回中创建一个中间件,用户来并填写任务表单。当他提交表单时,我们将数据保存在我们的数据库中,然后我们需要调用第三方 REST API 来存储附加了我们的数据库返回的 ID 的相同数据。 我读到了环回中的 REST 连接器,但我认为它没有达到目的。所以我决定继续使用请求库。 我创建了一个 RemoteMethod,我正在做这一切。这是代码:-

const request = require('request');
const url = "http://third-party-api";


module.exports = function(Tasks) {

  function cb(err, data){
    return { data: data };
  }

  Tasks.add = function(data, cb){
    Tasks.create({data: data}, function(err, object){
      var taskId = object.id
      request.get({url: url}, function(error, response, body){
        cb(error, body);
      });
    });
  };

  Tasks.remoteMethod(
        'add',
        {
          accepts: [{arg: 'data', type: 'object'}],
          returns: {arg: 'result', type: 'object'},
          http: {path: '/add', verb: "post"}
        }
  );
};

但这会导致错误(IP已更改):-

{"error":{"name":"Error","status":500,"message":"connect ECONNREFUSED 0.0.0.0","code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect","address":"0.0.0.0"}}

我无法弄清楚这里发生了什么。 NodeJs、Express、Loopback 对我来说一切都是新事物,而且我已经在圈子里转了很长时间。 我究竟做错了什么?还有其他我需要遵循的方法吗

【问题讨论】:

  • connect ECONNREFUSED 表示您无法与服务器通信。可能是它的端口问题。检查与服务器通信所需的所有信息
  • 尝试从浏览器访问您的第三方 API 并检查它是否为您提供任何信息
  • 报错进来的IP不是我的公网IP,甚至进来的端口也和loopback服务器的不一样。
  • 我可以使用请求库从节点控制台访问他们的服务器。第三方 API 需要基本身份验证。无法通过浏览器拨打电话。
  • 在使用request 模块进行请求时,您在哪里传递auth 信息

标签: node.js express loopbackjs


【解决方案1】:

0.0.0.0 表示本地机器上的所有 IP,localhost。

很可能,您忘记定义外部 api 正在侦听的端口。

例如,如果您的外部 API 正在侦听端口 3001,那么只需像这样修改您的代码

const url = "http://localhost:3001";

请注意,在您的用例中使用 request 没有任何问题,但环回 REST 连接器也将完全满足您的需求。

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多