首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB Stitch SDK在客户端实例化方面是如何工作的,或者Stitch.defaultAppClient.getServiceClient是如何工作的?

MongoDB Stitch SDK在客户端实例化方面是如何工作的,或者Stitch.defaultAppClient.getServiceClient是如何工作的?
EN

Stack Overflow用户
提问于 2020-01-03 10:51:27
回答 1查看 165关注 0票数 0

我正在使用expo构建一个React Native应用程序,但在尝试编写访问远程MongoDB服务器的代码时遇到了问题。我正在尝试使用MongoDB为React Native提供的Stitch SDK。

运行时

代码语言:javascript
复制
const mongoClient = Stitch.defaultAppClient.getServiceClient(RemoteMongoClient.factory, "mongodb-atlas");

我遇到了以下错误:StitchServiceError: service not found: 'mongodb-atlas'

当我的应用程序在我的主应用程序组件中初始化时,我正在按照推荐的文档使用Stitch.initializeDefaultAppClient初始化默认客户端。根据我的调试日志,这部分工作正常,我能够正确地向服务进行身份验证,并且我将客户端存储在App组件的状态中。我在主应用程序组件的构造函数中运行loadClient方法。

代码语言:javascript
复制
  _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()是如何工作的。

EN

回答 1

Stack Overflow用户

发布于 2020-01-04 08:15:33

我最终将客户端存储在saga js文件中的本地实例中,以便该实例可用于所有saga,并且我计划将所有saga保存在此文件中。我使用异步函数来确保在将任何客户端请求绑定到redux操作之前初始化应用程序客户端。

示例:

代码语言:javascript
复制
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应用程序功能解耦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59572624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档