使用Apollo graphql服务器进行上下文清理

时间:2018-09-09 01:13:03

标签: graphql apollo-server

我可以在ApolloServer中创建一个上下文函数,该上下文函数将在每个请求之前执行。

我如何拥有清理功能(执行请求后)?

2 个答案:

答案 0 :(得分:1)

不确定这是否仍然有意义,但我发现此媒介article解决了这个确切的问题。

当所有解析程序都运行后,您可以在希望代码运行时使用此代码段:

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: async ({ req }) => {
    ...
  },
  plugins: [
    {
      requestDidStart: () => ({
        willSendResponse: response => {
          // this will run after every request
          if (response.context.db) {
            response.context.db.close();
          }
        }
      })
    }
  ]
});

我看了看文档,却找不到这个插件系统。我没有发现任何阻止这种使用的东西,但这似乎不是官方的解决方案。

我在我的项目中尝试过它,但是它确实可以正常工作。

答案 1 :(得分:0)

不确定为什么要具有上下文清理功能?之前将上下文设置为每个请求的中间件,因此,如果您希望为另一个请求设置不同的上下文,则只需将逻辑注入到中间件即可。也许我只是不了解您的用例。如果您可以弄清为什么要应用它,将很有帮助?上下文是针对每个请求设置的,因此您可以基于apply plugin: 'com.android.application' android { compileSdkVersion 27 buildToolsVersion "27.0.3" defaultConfig { applicationId "com.example.mypc.urumcafe" minSdkVersion 17 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:27.1.1' compile 'com.android.support.constraint:constraint-layout:2.+' compile 'com.android.volley:volley:1.0.0' compile 'com.amitshekhar.android:android-networking:1.0.1' compile 'com.android.support:design:27.1.1' testCompile 'junit:junit:4.12' } 为某些请求注入枚举对象。如果需要在graphql中间件之后从req对象中清除信息,则可以执行另一个中间件,例如,在其中将req.user(如果已通过身份验证的用户)设置为null。