Я использую сервер Apollo GraphQL и директивы.
Вот моя простая схема. Обратите внимание на директиву в поле токена, Тип пользователя.
const typeDefs = `
directive @allow(service: String) on FIELD_DEFINITION
type User {
email: String!
pass: String!
... other fields here
token: String @allow(service: "login")
}
type Mutation {
login(email: String!, pass: String!): User
}`;
Я хотел бы вернуть поле токена, только если был вызван логин. В противном случае я хотел бы вернуть объект User без поля токена , все, что я мог найти, это выброс исключения или возврат нуля в поле «токен».
class SkipDirective extends SchemaDirectiveVisitor {
visitFieldDefinition(field, details) {
const { resolve = defaultFieldResolver } = field;
field.resolve = async function (...args) {
// If called in context different from "login"
// Here I would like to just "delete" the "token" field
else {
const result = await resolve.apply(this, args);
return result;
}
};
}
}
Идеи ?