无法使用 loopback-connector-remote 在另一个环回应用程序中调用一个环回应用程序模型
Unable to call one loopback app models in another looopback app using loopback-connector-remote
我使用 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.There 可能是一些问题在环回连接器远程
你也应该在loopbacktest1
中定义loopbacktest2
模型,表明要使用的数据源是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!`);
});
我使用 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.There 可能是一些问题在环回连接器远程
你也应该在loopbacktest1
中定义loopbacktest2
模型,表明要使用的数据源是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!`);
});