带有 NEST.JS 的 newrelic/apollo-server-plugin

Posted

技术标签:

【中文标题】带有 NEST.JS 的 newrelic/apollo-server-plugin【英文标题】:newrelic/apollo-server-plugin with NEST.JS 【发布时间】:2021-05-06 01:00:52 【问题描述】:

我正在使用 NEST.JS 框架,想添加 external 插件 New Relic Apollo Server plugin。

apollo-server-fastify: "^2.19.2"
@newrelic/apollo-server-plugin: "^0.1.2"

import  apolloServerNewRelicPlugin  from '@newrelic/apollo-server-plugin';

GraphQLModule.forRootAsync(
  imports: [ConfigModule],
  inject: [ConfigService],
  ....
  plugins: [apolloServerNewRelicPlugin],
),

    当我启动服务器进行 e2e 测试时,它需要真正的 NewRelic 密钥;有没有不需要真正的密钥就可以开始测试环境的方法?

    为了测试我用真实密钥启动服务器的东西; Missing Key and cannot start agent 错误消失了,但下面是我看到的错误

     UnhandledPromiseRejectionWarning: TypeError: Cannot use 'in' operator to search for '__internal_plugin_id__' in undefined
    my-application    |     at Object.pluginIsInternal (/usr/src/app/node_modules/apollo-server-fastify/node_modules/apollo-server-core/dist/plugin/internalPlugin.js:5:37)

【问题讨论】:

你用的是什么版本的nodejs? 节点版本 12.18 【参考方案1】:

更新:插件已更新,现在支持 TypeScript。

我最初遇到了同样的错误。我在这里工作的方法是创建一个包含模块声明的typings/newrelic-apollo-server-plugin/index.ts 文件:

declare module '@newrelic/apollo-server-plugin'

然后,在我的 NestJS 模块文件中:

import apolloServerNewRelicPlugin from '@newrelic/apollo-server-plugin'

@Module(
  imports: [
    ...
    GraphQLModule.forRoot(
      ...
      plugins: [apolloServerNewRelicPlugin],
    ),

【讨论】:

以上是关于带有 NEST.JS 的 newrelic/apollo-server-plugin的主要内容,如果未能解决你的问题,请参考以下文章

在 Nest.js 中接受表单数据

使用 class-validator 和 Nest.js 验证对象数组

Nest.js 全局守卫

Nest.js 获取注入器实例

在 nest.js 中处理第三方依赖项

Nest.JS 和 Observables