GraphQL-未知指令“;独特的;

GraphQL-未知指令“;独特的;,graphql,graphql-js,Graphql,Graphql Js,我刚刚将GraphQL从版本0.13.2更新到14.0.2。启动服务器时,我收到错误消息:错误:未知指令“unique”。这是我的模式: const { gql } = require('apollo-server') // type Query is the root query exports.typeDefs = gql` type User { username: String! @unique password: String! } type Query {

我刚刚将GraphQL从版本0.13.2更新到14.0.2。启动服务器时,我收到错误消息:
错误:未知指令“unique”
。这是我的模式:

const { gql } = require('apollo-server')

// type Query is the root query
exports.typeDefs = gql`
type User {
    username: String! @unique
    password: String!
}

type Query {
    getAllUsers: User
}
请注意,即使我在使用阿波罗服务器上的
gql
,它也在引擎盖下使用GraphQL


正如你所看到的,问题是我已经做了,所以用户名必须是唯一的。GraphQL的更新版本不能再具有此指令。果然,删除
@unique
解决了这个问题。我仍然希望用户名是唯一的。我读过,你可以创建自定义指令。我该怎么做呢

我在使用完全自定义的指令时遇到了与您类似的情况,将graphql工具升级到v14。模式中需要该指令的定义。您可以通过字段、对象、变量指定指令的工作位置

directive @requireAuth on FIELD_DEFINITION
在这样的地方工作,在野外

extend type Query {
  me: String! @requireAuth
  user(userId: ID!):User!    
  users: [User]!  
}
我的类扩展了SchemaDirectiveVisitor它是这样的

import { SchemaDirectiveVisitor } from "apollo-server";

export class YourCustomDirective extends SchemaDirectiveVisitor {
    // Your code for the directive 
}
在提供的链接中,有可用的methdos可供使用,以便在字段、对象、标量等级别使用自定义逻辑。希望这有帮助


@unique
指令专门针对某些产品,如Prisma,它扩展了GraphQL.js提供的基本功能。它不是GraphQL.js模块的一部分,所以升级它不会有什么不同。您是否在使用Prisma或GraphQL上的其他层(阿波罗服务器外部)?如果不是,您试图通过
@unique
指令引入什么行为?除非您的类型定义用于创建底层数据库架构(Prisma之类的工具就是这样做的),否则就如何解析GraphQL请求而言,将字段声明为“唯一”实际上会起到什么作用还不清楚。@avatarhzh您找到解决方案了吗?我也被这个问题困住了。@progeek不,我刚刚从架构中删除了
@unique
。我使用的是Mongoose/MongoDB,所以只要求用户名在Mongoose模型中是唯一的。