我使用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
答案 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!`);
});