gpt4 book ai didi

javascript - Apollo-server 2 验证中间件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:36 24 4
gpt4 key购买 nike

我想为 apollo 服务器添加一个验证层。它应该在每个 graphql 查询/突变之后但在解析器函数之前运行。验证层将需要知道被调用的 graphql 查询/突变和传递的参数。如果它无效,它将抛出错误并阻止解析器函数运行。

如果不手动将其放置在每个解析器函数中,我不清楚将其注入(inject)何处。

最佳答案

graphql-tools 实际上包含一个 addSchemaLevelResolveFunction 实用程序,它允许您为每个 QueryMutation 包装解析器> 和 Subscription 字段来模拟“根级解析器”:

const { makeExecutableSchema, addSchemaLevelResolveFunction } = require('graphql-tools')

const schema = makeExecutableSchema({ resolvers, typeDefs })
const rootLevelResolver = (root, args, context, info) => {
// Your validation logic here. Throwing an error will prevent the wrapped resolver from executing.
// Note: whatever you return here will be passed as the parent value to the wrapped resolver
}
addSchemaLevelResolveFunction(schema, rootLevelResolver)

这是将一些逻辑应用到所有根级字段的简单方法,但如果只有一些 字段您想应用此逻辑,就会有点麻烦。如果是这种情况,现在您必须维护一个白名单或黑名单字段列表,与您的架构分开。如果您团队中的其他人正在添加新字段并且不知道此机制,这可能会很麻烦。如果您想将相同的逻辑应用于根级别字段之外的字段,它也不是很有帮助。

更好的方法是使用自定义架构指令,as outlined in the docs .这允许您指示将逻辑应用于哪些字段:

directive @customValidation on FIELD_DEFINITION

type Query {
someField: String @customValidation
someOtherField: String
}

关于javascript - Apollo-server 2 验证中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53838475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com