“消息”错误:“禁止”尝试查询 Apollo Serverless Lambda 服务器

Posted

技术标签:

【中文标题】“消息”错误:“禁止”尝试查询 Apollo Serverless Lambda 服务器【英文标题】:Error with "message": "Forbidden" trying to query an Apollo Serverless Lambda server 【发布时间】:2020-01-04 13:44:57 【问题描述】:

我正在尝试按照这个示例 https://www.apollographql.com/docs/apollo-server/deployment/lambda/ 创建一个返回“Hello world”的无服务器 GraphQL 服务器。

根目录基本上只包含两个文件,graphql.jsserverless.yml

> tree . -I node_modules
.
├── graphql.js
├── package-lock.json
├── package.json
└── serverless.yml

在哪里,如示例中,graphql.js 读取

const  ApolloServer, gql  = require('apollo-server-lambda');

const typeDefs = gql`
  type Query 
    hello: String
  
`;

const resolvers = 
  Query: 
    hello: () => 'Hello world!',
  ,


const server = new ApolloServer( typeDefs, resolvers );

exports.graphqlHandler = server.createHandler();

serverless.yml 读取

service: apollo-lambda

provider:
  name: aws
  runtime: nodejs8.10
functions:
  graphql:
    handler: graphql.graphqlHandler
    events:
      - http:
          path: graphql
          method: post
          cors: true
      - http:
          path: graphql
          method: get
          cors: true

这似乎部署成功:

> serverless deploy
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
.....
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service apollo-lambda.zip file to S3 (4.55 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
....................................
Serverless: Stack update finished...
Service Information
service: apollo-lambda
stage: dev
region: us-east-1
stack: apollo-lambda-dev
resources: 12
api keys:
  None
endpoints:
  POST - https://e9g6evoks0.execute-api.us-east-1.amazonaws.com/dev/graphql
  GET - https://e9g6evoks0.execute-api.us-east-1.amazonaws.com/dev/graphql
functions:
  graphql: apollo-lambda-dev-graphql
layers:
  None
Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.

但是,如果我去操场查询“你好”,我会收到一条“禁止”消息:

也就是说,我的

query 
  hello

而不是产生记录在https://www.apollographql.com/docs/apollo-server/essentials/server/ 的响应,而是产生一个


  "error": 
    "message": "Forbidden"
  

知道我在这里做错了什么吗?

【问题讨论】:

【参考方案1】:

好的,我发现了错误。 apollo-server-lamdba 存在一个已知问题。

在浏览 Playground(https://e9g6evoks0.execute-api.us-east-1.amazonaws.com/dev/graphql)时,端点的 url 已预先归档,但它错过了 /dev/ 部分(在 serverless.yml 中定义的阶段部分)。只需添加它就可以了。

cfr:https://github.com/apollographql/apollo-server/issues/2136#issuecomment-458465128

【讨论】:

我仍然缺少一些东西。你做了什么来解决这个问题? 即使在添加舞台开发后我也面临同样的问题。有什么建议吗?【参考方案2】:

其实原教程已经有了解决方案(Setting up GraphQL Playground)。只需如下编辑您的代码。

const server = new ApolloServer( 
    typeDefs, 
    resolvers, 
    playground: 
        endpoint: "/dev/graphql"
    
);

【讨论】:

以上是关于“消息”错误:“禁止”尝试查询 Apollo Serverless Lambda 服务器的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 React Apollo Query 组件进行 GraphQL 查询,打字稿导致错误

Apollo GraphQL iOS - 尝试在查询中使用“ID”时出现“未找到生成的操作”错误

Nuxt(Vue) 使用 $apollo.query 处理 Apollo 错误

如何处理 Vue.JS 中的 Apollo Graphql 查询错误?

使用 Apollo-Client 重新获取查询会引发错误

Apollo 客户端:从有错误的查询中检索结果