如何将 Apollo Server 异步附加到 Lambda 处理程序?
Posted
技术标签:
【中文标题】如何将 Apollo Server 异步附加到 Lambda 处理程序?【英文标题】:How do I attach Apollo Server to a Lambda handler asynchronously? 【发布时间】:2020-10-21 04:45:05 【问题描述】:我正在使用 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
函数只执行return new ApolloServer( ... )
,所以它同样简单。
但是,现在我需要拼接一个新的远程架构。问题是拼接过程是异步发生的。所以现在我对createApolloServer()
的调用也需要异步进行。
我显然不能在根级别做const apollo = await createApolloServer()
。
到目前为止,我已经尝试过类似以下的方法:
const startServer = async () =>
const apollo = await createGraphQLService();
apollo.applyMiddleware( app );
;
startServer();
exports.handler = serverless(app);
但现在我的 /graphql
端点返回 404。
如何启动此服务器?
【问题讨论】:
【参考方案1】:我可以这样做;不确定这是否是最好的方法,但它似乎有效:
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);
;
【讨论】:
以上是关于如何将 Apollo Server 异步附加到 Lambda 处理程序?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 apollo-server-express 部署到 lambda?
Apollo-Server,如何与 SailsJS 一起使用?
如何将 SQL Server 表中的数据附加到 Access 表中?