nodejs升级后运行apollo服务器的问题(使用nestjs和fastify)

Posted

技术标签:

【中文标题】nodejs升级后运行apollo服务器的问题(使用nestjs和fastify)【英文标题】:Problem running apollo server after nodejs upgrade (using nestjs and fastify) 【发布时间】:2021-08-14 17:18:50 【问题描述】:

我的 NestJs 应用出现问题。项目一直运行到昨天为止。

显然我的 node.js 从14.16.1 升级到14.17.0。所以我在engines 对象中更改了这个版本号,在package.json 中。我再次执行了yarn install,以确保一切都在那里,并尝试了yarn start:dev(转换为nest start --watch)。

但是我的应用没有运行 =( 我的 apollo-server-fastify 似乎有问题:

UnhandledPromiseRejectionWarning: Error: You must `await server.start()` before calling `server.createHandler()`
    at ApolloServer.assertStarted (/app/node_modules/apollo-server-fastify/node_modules/apollo-server-core/dist/ApolloServer.js:213:19)
    at ApolloServer.createHandler (/app/node_modules/apollo-server-fastify/dist/ApolloServer.js:22:14)
    at GraphQLModule.<anonymous> (/app/node_modules/@nestjs/graphql/dist/graphql.module.js:150:45)
    at Generator.next (<anonymous>)
    at /app/node_modules/tslib/tslib.js:117:75
    at new Promise (<anonymous>)
    at Object.__awaiter (/app/node_modules/tslib/tslib.js:113:16)
    at GraphQLModule.registerFastify (/app/node_modules/@nestjs/graphql/dist/graphql.module.js:143:24)
    at GraphQLModule.<anonymous> (/app/node_modules/@nestjs/graphql/dist/graphql.module.js:118:28)
    at Generator.next (<anonymous>)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:323734) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:323734) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

我知道 apollo 和 fastify 现在不是最好的朋友,我想我过去曾遇到过需要降级某些软件包的问题。有谁知道如何调试/修复这个?我觉得一头雾水。 当前软件包版本:

"@nestjs/common": "^7.0.0",
"@nestjs/graphql": "^7.7.0",
"@nestjs/platform-fastify": "^7.6.4",
"apollo-server-fastify": "^3.0.0-alpha.3",
"graphql": "^15.5.0",

(我也尝试将 apollo-server-fastify 升级到 alpha 4,但问题仍然存在)。

【问题讨论】:

检查问题是否是this one 我猜不是。再次尝试yarn install,没有任何改变。然后我发现 fastify 不是 nestjs 项目的直接依赖。打开它的 node_modules 目录,它的当前版本是 3.14.0。所以最近没更新 【参考方案1】:

TLDR

在维护人员解决此问题之前,临时修复方法是将this patch file 复制到您的存储库中,然后修改您的 package.json 以使用以下内容:

"@nestjs/graphql": "patch:@nestjs/graphql@7.10.6#[YOUR/LOCAL/PATH]/graphql.patch"

背景

我的项目也遇到了同样的问题。我不确定来源,但我确实看到 apollo-server-fastify 大约在 5 天前更新为 3.0.0-lambda.0 并在几个小时前更新为 3.0.0-preview.0。

我在@nestjs/graphql 中跟踪到registerFastify 方法的可能修复。我相信,解决方案是在调用 Apollo 服务器的 createHandler() 方法之前,在 lib/graphql.module.ts 的第 228 行调用 await apolloServer.start()。我在存储库上opened an issue 提供了更多详细信息,您可以继续关注直到解决。

我在使用yarn patch @nestjs/graphql 处理的模板存储库中实施了修复。该存储库位于dev-nx 分支troncali/nest-vue。补丁位于./.yarn/patches/@nestjs/graphql.patch

【讨论】:

以上是关于nodejs升级后运行apollo服务器的问题(使用nestjs和fastify)的主要内容,如果未能解决你的问题,请参考以下文章

如何使“apollo 服务器”与 graphql schemaObject 一起使用?

升级到 Apollo 客户端 2 后尝试向结果 gql 数据对象添加字段时出现“对象不可扩展”

React Apollo - nodejs graphql后端返回异步响应后如何重新获取(更新)数据

webpack升级后找不到命名空间NodeJS

nodejs/vanilla 中的 Apollo-client 未触发订阅

我如何通过 nodejs 通过 apollo-server 从服务器获取所有数据