首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将GraphQL架构分解为AWS (SST -> AppSyncApi)中的多个文件?

如何将GraphQL架构分解为AWS (SST -> AppSyncApi)中的多个文件?
EN

Stack Overflow用户
提问于 2022-10-20 05:37:37
回答 1查看 82关注 0票数 0

海温AppSyncApi中,可以清楚地提到模式可以具有字符串的string[]类型,但是当我使用graphql模式源数组作为字符串时,我将得到这个错误

在堆栈配置中获取多个graphql源的错误。

我是否可以为每一节使用单独的graphql模式,以便很容易管理大型applicatios。

项目链接

后端项目

错误

代码语言:javascript
复制
 TypeError: mergeTypeDefs is not a function
    at AppSyncApi.createGraphApi (file:///E:/aws_projects/backend/node_modules/@serverless-stack/resources/dist/AppSyncApi.js:240:42)
    at new AppSyncApi (file:///E:/aws_projects/backend/node_modules/@serverless-stack/resources/dist/AppSyncApi.js:48:14)
    at EmptyStack.MyStack (file:///E:/aws_projects/backend/.build/lib/index.js:3386:15)
    at stack (file:///E:/aws_projects/backend/node_modules/@serverless-stack/resources/dist/FunctionalStack.js:15:35)
    at App.stack (file:///E:/aws_projects/backend/node_modules/@serverless-stack/resources/dist/App.js:336:16)
    at Module.main (file:///E:/aws_projects/backend/.build/lib/index.js:3437:7)
    at file:///E:/aws_projects/backend/.build/run.mjs:99:22 

文件夹结构

代码语言:javascript
复制
.
├── lib
│   ├── MyStack
│   ├── Resolvers
│   ├── Schemas
│   └── DataSources
├── src
│   ├── feature1
│   |  ├── feature1.graphql
│   |  ├── feature1.handler
│   |  ├── feature1.resolver
│   ├── feature2
│   |  ├── feature2.graphql
│   |  ├── ...
│   ├── ...
│   └── ...
└── ...

这是我的堆栈配置

代码语言:javascript
复制
import { StackContext, AppSyncApi, Cognito } from '@serverless-stack/resources';
import dataSources from './dataSources';
import resolvers from './resolvers';
import { AuthorizationType, UserPoolDefaultAction } from '@aws-cdk/aws-appsync-alpha';
import { Duration, Expiration } from 'aws-cdk-lib';

export function MyStack({ stack }: StackContext) {
  // Create the AppSync GraphQL API
  const auth = new Cognito(stack, 'Auth');

  const api = new AppSyncApi(stack, 'AppSyncApi', {
    schema: ['src/feature1/feature1.graphql','src/feature1/feature1.graphql'],
    defaults: {
      function: {
        timeout: 20,
        environment: {
          DATABASE:
            process.env.DATABASE ||
            `mongodb+srv://${process.env.MONGO_USERNAME}:${process.env.MONGO_PASSWORD}@atlascluster.sr2q4hg.mongodb.net/${process.env.DATABASE_NAME}?retryWrites=true&w=majority`,
          GRAPHQL_API_URL: process.env.GRAPHQL_API_URL || '',
          GRAPHQL_API_KEY: process.env.GRAPHQL_API_KEY || '',
        },
      },
    },
    cdk: {
      graphqlApi: {
        authorizationConfig: {
          defaultAuthorization: {
            authorizationType: AuthorizationType.USER_POOL,
            userPoolConfig: {
              userPool: auth.cdk.userPool,
              defaultAction: UserPoolDefaultAction.ALLOW,
            },
          },
          additionalAuthorizationModes: [
            {
              authorizationType: AuthorizationType.API_KEY,
              apiKeyConfig: {
                expires: Expiration.after(Duration.days(365)),
              },
            },
          ],
        },
      },
    },
    dataSources: dataSources,
    resolvers: { ...resolvers },
  });
  api.attachPermissions(['s3']);

  // Show the AppSync API Id in the output
  stack.addOutputs({
    ApiId: api.apiId,
    APiUrl: api.url,
    UserPoolId: auth.userPoolId,
    UserPoolClientId: auth.userPoolClientId,
  });
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-22 01:45:51

这很可能是因为“@graphql/merge”:"^8.2.12“是包中的devDependency,默认情况下不可用。

不确定这是否是为了减少不使用它的人的包大小。

无论如何,如果您想要快速修复,您可以始终将它添加到您的package.json中。

解决方案:-

代码语言:javascript
复制
yarn add --dev @graphql-tools/merge

代码语言:javascript
复制
npm install -D @graphql-tools/merge

这将解决问题。

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

https://stackoverflow.com/questions/74134881

复制
相关文章

相似问题

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