node.js - 如何将 Apollo Server 异步附加到 Lambda 处理程序?
问题描述
我正在使用 Apollo Server 在使用 koa.js 的 AWS Lambda 上提供 GraphQL 端点。
服务器非常简单:
import Koa from 'koa';
import Router from 'koa-router';
import bodyParser from 'koa-bodyparser';
import cors from '@koa/cors';
import logger from 'koa-logger';
import serverless from 'serverless-http';
import { createApolloServer } from './graphql';
const app = new Koa();
const router = new Router();
app.use(logger())
.use(bodyParser())
.use(cors())
.use(router.routes())
.use(router.allowedMethods());
const apollo = createApolloServer();
apollo.applyMiddleware({ app });
exports.handler = serverless(app);
该createApolloServer
函数只是做 areturn new ApolloServer({ ... })
所以它同样简单。
但是,现在我需要缝合一个新的远程模式。问题是拼接过程是异步发生的。所以现在我的调用也createApolloServer()
需要异步进行。
我显然不能const apollo = await createApolloServer()
在根级别做。
到目前为止,我已经尝试过类似于以下内容:
const startServer = async () => {
const apollo = await createGraphQLService();
apollo.applyMiddleware({ app });
};
startServer();
exports.handler = serverless(app);
但现在我的/graphql
端点返回 404。
如何启动此服务器?
解决方案
我能够做到这一点;不确定这是否是最好的方法,但它似乎有效:
const startServer = async () => {
const apollo = await createGraphQLService();
apollo.applyMiddleware({ app });
return serverless(app);
};
let serverStartup = startServer();
exports.handler = async (event, context) => {
let handler = await serverStartup;
return await handler(event, context);
};
推荐阅读
- c++ - C++指针的地址
- vue.js - bootstrap-vue table - 多数据过滤器
- maven - 如果父级或某些依赖项有更新的版本可用,更新 pom.xml,使用 Maven 的 Jenkins 管道?
- github - R Studio 和 GitHub - 不克隆
- ibm-watson - 是否可以通过 MQTT 客户端同时连接多个指定的 IoT Watson 设备?
- javascript - 在 D3.js 中缩放/缩小文本时调整文本大小
- c++ - 检查地址是否可达
- redis - 如何为第三方客户端存储和使用多个用户的密钥
- flutter - 如何删除 DropdownButton 中的高程?
- javascript - 如何防止我的 html 选择标签在每次点击时填充重复数据?