我可以在ApolloServer
中创建一个上下文函数,该上下文函数将在每个请求之前执行。
我如何拥有清理功能(执行请求后)?
答案 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。