Kur*_*eek 2 javascript node.js apollo graphql serverless
我正在尝试遵循此示例,https://www.apollographql.com/docs/apollo-server/deployment/lambda/创建一个无服务器 GraphQL 服务器,该服务器返回“Hello world”。
根目录基本上只包含两个文件,graphql.js以及serverless.yml:
> tree . -I node_modules
.
??? graphql.js
??? package-lock.json
??? package.json
??? serverless.yml
Run Code Online (Sandbox Code Playgroud)
其中,如示例中所示,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();
Run Code Online (Sandbox Code Playgroud)
并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
Run Code Online (Sandbox Code Playgroud)
这似乎部署成功:
> 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.
Run Code Online (Sandbox Code Playgroud)
但是,如果我去操场并查询“你好”,我会收到一条“禁止”消息:
那是我的
query {
hello
}
Run Code Online (Sandbox Code Playgroud)
而不是导致在https://www.apollographql.com/docs/apollo-server/essentials/server/记录的响应,导致
{
"error": {
"message": "Forbidden"
}
}
Run Code Online (Sandbox Code Playgroud)
知道我在这里做错了什么吗?
小智 5
好的,我发现了错误。apollo-server-lamdba 存在一个已知问题。
在浏览Playground 时(在https://e9g6evoks0.execute-api.us-east-1.amazonaws.com/dev/graphql),端点的 url 是预配置的,但它错过了/dev/部分(无服务器中定义的阶段部分) .yml)。只需添加它,这将正常工作。
cfr: https://github.com/apollographql/apollo-server/issues/2136#issuecomment-458465128