#node.js #express #graphql #apollo-server #mern
#node.js #экспресс #graphql #apollo-server #mern
Вопрос:
Итак, я не знаю, как справиться с этим в службе graphql.
Я переношу службу из rest — express api в apollo api.
моя текущая схема mongo выглядит следующим образом:
const PostSchema = new mongoose.Schema({
title: { type: String, required: true },
body: { type: String },
uid: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
privacy: { type: String, enum: ['everyone','followers','onlyme'], default: 'everyone' },
});
const UserSchema = new mongoose.Schema({
name: { type: String, required: true },
followers: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
});
в среде Express я получал post с заполненным пользователем, а затем применял функцию контроля конфиденциальности на основе подписчиков пользователя.
но в apollo я не могу получить доступ к post после его заполнения. где я могу применить директиву или что-то еще после разрешения полей post?
схема graphql:
type User {
_id: ID!
name: String
followers: [ID]
}
type Post {
_id: ID!
title: String!
body:String
uid :User @privacy
}
extend type Query{
post(_id: String):Post
posts:[Post]
}
распознаватель сообщений:
{
Query: {
post: (p, a, ctx, info) => {
return ctx.modules.post.getPost(a._id)
}
},
Post: {
uid: (p, a, ctx, info) => {
return ctx.modules.user.getUser(p.uid);
}
},
}
Комментарии:
1. Есть ли какая-либо причина, по которой вы не можете просто сделать это внутри вашего преобразователя?
2. да, потому что у post resolver нет заполненного
uid
поля, которое требуется функции конфиденциальности, если я не извлеку его дважды вpost resolver
и вuid resolver