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 数据:
- returning data 来自
async
函数
- 将数据传递给
context.done()
方法
在您的代码中,handler
是 apollo-server-azure-functions
包中的一个方法。它在内部调用 context.done()
将响应发送回 Azure 运行时。
但是因为 handler(context, request)
本身是一个常规函数调用,所以您导出的 top-level async
函数无需等待它完成即可解析。
您可能想要 return 来自您的异步函数的 Promise,它将在底层 apollo 服务器准备好发送响应时解析。这是 example implementation.
我想将我的 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 数据:
- returning data 来自
async
函数 - 将数据传递给
context.done()
方法
在您的代码中,handler
是 apollo-server-azure-functions
包中的一个方法。它在内部调用 context.done()
将响应发送回 Azure 运行时。
但是因为 handler(context, request)
本身是一个常规函数调用,所以您导出的 top-level async
函数无需等待它完成即可解析。
您可能想要 return 来自您的异步函数的 Promise,它将在底层 apollo 服务器准备好发送响应时解析。这是 example implementation.