Azure 函数:在异步函数中使用 Apollo Azure 处理程序

Azure functions: Use Apollo Azure handler in async function

我想将我的 apollo 处理程序包装到一个异步函数中,以便在处理程序函数执行之前执行一些检查。一切正常,当我不使用异步函数但将函数导出为异步时 returns 总是空响应。

functions.json

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ],
  "scriptFile": "../dist/graphql/index.js"
}

设置:

    import { buildSchema } from 'type-graphql';
    import { ApolloServer } from 'apollo-server-azure-functions';
    import { Context, HttpRequest } from '@azure/functions';
    
    import { resolvers } from '../src/graphql';
    import { authChecker } from '../src/auth';
    
    const schema = buildSchema({
      resolvers,
      authChecker,
    });
    
    const server = new ApolloServer({
      schema,
      context: ({ context }) => context, // directly use azure Context as Apollo context,
    });
    
    const handler = server.createHandler();

这个有效

export default (context: Context, request: HttpRequest) => {
  handler(context, request);
};

这个returns总是204,空响应

export default async (context: Context, request: HttpRequest) => {
  // do async stuff: await ... 

  handler(context, request);
};

有两种方法可以从 Node.js Azure 函数中 return 数据:

在您的代码中,handlerapollo-server-azure-functions 包中的一个方法。它在内部调用 context.done() 将响应发送回 Azure 运行时。

但是因为 handler(context, request) 本身是一个常规函数调用,所以您导出的 top-level async 函数无需等待它完成即可解析。

您可能想要 return 来自您的异步函数的 Promise,它将在底层 apollo 服务器准备好发送响应时解析。这是 example implementation.