我正在使用expo构建一个React Native应用程序,但在尝试编写访问远程MongoDB服务器的代码时遇到了问题。我正在尝试使用MongoDB为React Native提供的Stitch SDK。
运行时
const mongoClient = Stitch.defaultAppClient.getServiceClient(RemoteMongoClient.factory, "mongodb-atlas");我遇到了以下错误:StitchServiceError: service not found: 'mongodb-atlas'
当我的应用程序在我的主应用程序组件中初始化时,我正在按照推荐的文档使用Stitch.initializeDefaultAppClient初始化默认客户端。根据我的调试日志,这部分工作正常,我能够正确地向服务进行身份验证,并且我将客户端存储在App组件的状态中。我在主应用程序组件的构造函数中运行loadClient方法。
_loadClient() {
console.log("Loading Stitch client");
Stitch.initializeDefaultAppClient("xxxxxxxxxxxxxxx").then(client => {
this.setState({ client });
this.state.client.auth
.loginWithCredential(new AnonymousCredential())
.then(user => {
console.log(`Successfully logged in as user ${user.id}`);
this.setState({ currentUserId: user.id });
this.setState({ currentUserId: client.auth.user.id });
})
.catch(err => {
console.log(`Failed to log in anonymously: ${err}`);
this.setState({ currentUserId: undefined });
});
});
} 更多上下文:我在一个单独的react saga中执行getServiceClient函数,这样我就可以根据应用程序中调度的操作来获取幕后的数据。我在一个函数中调用getServiceClient,该函数在每次调度特定操作时都会被调用。所有这些都被导出到单个异步函数,然后作为saga中间件增强器应用到存储中。
我认为我无法检索服务客户端,因为由于saga的工作方式(据我所知),getServiceClient客户端没有在saga的上下文中初始化,但我需要更深入地了解saga()是如何工作的。
发布于 2020-01-04 08:15:33
我最终将客户端存储在saga js文件中的本地实例中,以便该实例可用于所有saga,并且我计划将所有saga保存在此文件中。我使用异步函数来确保在将任何客户端请求绑定到redux操作之前初始化应用程序客户端。
示例:
let appClient;
function* initAppClient() {
console.log("Initializing Stitch Client");
yield Stitch.initializeDefaultAppClient("client-identification-here ").then(client => appClient=client);
}
export default function* rootSaga() {
yield initAppClient();
yield takeEvery('ACTION HERE', uploadState);
}这种方法的缺点是,这个实例将不能用于我的react应用程序的其余部分,并且我将无法使用Stitch功能来通过实际的react应用程序更新任何内容。这对我来说是可行的,因为我只计划在我的应用程序中状态改变时使用Stitch,这会将任何服务器/远程数据操作从专注于呈现、路由等的react应用程序功能解耦。
https://stackoverflow.com/questions/59572624
复制相似问题