类型 'Promise<GraphQLSchema>' 缺少类型 'GraphQLSchema' 的以下属性
Type 'Promise<GraphQLSchema>' is missing the following properties from type 'GraphQLSchema'
我正在尝试将 Apollo Server 作为打字稿中的云函数启动,并希望在我的 typeDef 中使用 @cypher 和 @relationship 指令。
为了使用这些指令,我使用了 "@neo4j/graphql": "^3.0.0".
我在向 apollo 服务器提供模式时遇到错误。 getSchema() returns 一个 Promise 但 ApollServer 需要一个 GraphQL Schema 类型的模式。
const neoSchema = new Neo4jGraphQL({ typeDefs });
const server = new ApolloServer({
schema: neoSchema.getSchema(),
context: ({ req }) => ({
headers: req.headers,
req,
}),
});
exports.handler = server.createHandler();
如果有人能帮助我,我将不胜感激。
Apollo 服务器无法在这一步处理承诺,并且您不能执行 top-level 等待(除非您在 typescript.next),所以您必须将其包装在另一个功能。
危险:不要跳过这一部分
如果您不记住这一点,您将在每次调用时创建一个新的处理程序,这会导致文件描述符泄漏。其症状是您将开始对所有内容(包括 DNS 查找)超时,因此您将开始在代码中出现 ENOTFOUND
错误。我为你们的后代添加了评论:
const neoSchema = new Neo4jGraphQL({ typeDefs });
let _cachedHandler: ReturnType<ApolloServer['createHandler']>;
/**
* We have to be careful here that we're not creating a new server on EVERY invocation
* because that will create a file descriptor leak. Make sure you're using a memoized cache
*/
const memoizedHandler = async (event, context) => {
if (!_cachedHandler) {
const server = new ApolloServer({
schema: await neoSchema.getSchema(),
context: ({ req }) => ({
headers: req.headers,
req,
}),
});
// this is the actual handler
_cachedHandler = server.createHandler();
}
// now we can just call the handler
return _cachedHandler(event, context);
}
exports.handler = memoizedHandler;
我正在尝试将 Apollo Server 作为打字稿中的云函数启动,并希望在我的 typeDef 中使用 @cypher 和 @relationship 指令。
为了使用这些指令,我使用了 "@neo4j/graphql": "^3.0.0".
我在向 apollo 服务器提供模式时遇到错误。 getSchema() returns 一个 Promise 但 ApollServer 需要一个 GraphQL Schema 类型的模式。
const neoSchema = new Neo4jGraphQL({ typeDefs });
const server = new ApolloServer({
schema: neoSchema.getSchema(),
context: ({ req }) => ({
headers: req.headers,
req,
}),
});
exports.handler = server.createHandler();
如果有人能帮助我,我将不胜感激。
Apollo 服务器无法在这一步处理承诺,并且您不能执行 top-level 等待(除非您在 typescript.next),所以您必须将其包装在另一个功能。
危险:不要跳过这一部分
如果您不记住这一点,您将在每次调用时创建一个新的处理程序,这会导致文件描述符泄漏。其症状是您将开始对所有内容(包括 DNS 查找)超时,因此您将开始在代码中出现 ENOTFOUND
错误。我为你们的后代添加了评论:
const neoSchema = new Neo4jGraphQL({ typeDefs });
let _cachedHandler: ReturnType<ApolloServer['createHandler']>;
/**
* We have to be careful here that we're not creating a new server on EVERY invocation
* because that will create a file descriptor leak. Make sure you're using a memoized cache
*/
const memoizedHandler = async (event, context) => {
if (!_cachedHandler) {
const server = new ApolloServer({
schema: await neoSchema.getSchema(),
context: ({ req }) => ({
headers: req.headers,
req,
}),
});
// this is the actual handler
_cachedHandler = server.createHandler();
}
// now we can just call the handler
return _cachedHandler(event, context);
}
exports.handler = memoizedHandler;