无法使用loopback-connector-remote在另一个looopback应用程序中调用一个环回应用程序模型

时间:2017-09-23 17:43:25

标签: loopbackjs strongloop

我使用lb cli

创建了两个测试环回应用程序
1) loopbacktest1
2) loopbacktest2

我正在使用loopback-connector-remote来访问loopbacktest2 loopbacktest1中的模型,但我无法访问它,我甚至无法访问它 在app1中看到app2模型(反之亦然),任何人都可以帮助我吗?

这是我的数据表

{
 "db": {
 "name": "db",
 "connector": "memory"
 },
"MyMicroService": {
 "name": "MyMicroService",
 "connector": "remote",
 "url": "http://localhost:7001/api"
 }
}

用最终答案更新问题: -

在json文件中添加以下配置(这是远程方法名称)

  todos.json
  "methods": {
    "getName": {
      "returns": {
      "arg": "data",
      "type": "string"
     },
     "http": {
       "verb": "get"
     }
   }
  }

并调用这样的远程方法

const remoteDs = ModelName.app.dataSources.MyMicroService;
  // the strong-remoting RemoteObjects instance
  const remotes = remoteDs.connector.remotes;
  remotes.auth = {
    bearer: `${access_token}`,
    sendImmediately: true
  };
  MyMicroService.app.models.todos.getName(function (err, data) {
    cb(err, data);
  });
  // cb(null, data);
}).catch((err) => {
  cb("sone error", null);
});

在这里我仍然面临一些小问题,即如果上面的身份验证失败,那么我得到的错误是null和数据未定义,而是我期待错误值和数据为null。在loopback-connector中可能存在一些问题-remote

1 个答案:

答案 0 :(得分:1)

您还应在loopbacktest2中定义loopbacktest1模型,表明要使用的数据源为MyMicroService

如果您按照https://github.com/strongloop-community/loopback-example-connector/tree/remote上的示例进行操作,那么您应该有一个client子目录,其中包含多个文件,其中包括model-config.json,您应该在其中添加loopbacktest1模型MyMicroService作为数据源。

在common / models中,每个模型都有一个json文件,至少包含一个简单定义,如https://github.com/strongloop-community/loopback-example-connector/blob/remote/common/models/person.json

我已经按照这个例子立即开始工作了。

我用这种方式处理了身份验证:

const app = require('./client/client');
const User = app.models.User;
const MyModel = app.models.MyModel;
// the remote datasource (as defined in datasources.json)
const remoteDs = app.dataSources.remoteDS;
// the strong-remoting RemoteObjects instance
const remotes = remoteDs.connector.remotes;
/*
   credentials.json example (I keep it untracked by git):

   {
    "email": "example@example.com",
    "password": "123456"
   }

*/
const credentials = require('./credentials.json');

User.login(credentials).then(token => {
    // store the token to allow logout
    credentials.token = token;

    // set the access token to be used for all future invocations
    remotes.auth = {
        bearer: (new Buffer(token.id)).toString('base64'),
        sendImmediately: true
    };

    /* from this point every request made by any model attached 
       to remoteDS will be authenticated */
    return MyModel.find();
}, err => {
    // handle auth error
}).then(models => {
    console.log(`Got ${models.length} instances!`);
});