#node.js #express #graphql #apollo-server #graphql-js
#node.js #выразить #graphql #apollo-server #graphql-js
Вопрос:
Итак, моя проблема заключается в попытке получить доступ к контексту внутри этого класса. Он всегда возвращает undefined . Теперь я попытался работать над этим без использования dataSources
, и все работает нормально, но как только я ввожу dataSources
внутренний apolloServer
конструктор, я не могу получить доступ к контексту.
Вот мой apolloServer
конструктор
Здесь определяется apolloServer
конструктор
const server = new ApolloServer({
typeDefs,
resolvers,
dataSources: () => {
return {
usersApi: new UsersApi()
}
},
context:async({req,connection})=>{
if(connection){
return {
connection.context;
}
}else{
let user = req.user || "";
if(user){
let users = await Users.findOne({_id:req.user.id});
return {users}
}}
},
});
Вот мой решатель для обработки получения сведений о пользователе после регистрации
Вот один из моих преобразователей, который разрешает и извлекает пользовательские данные из базы данных
signUp:async(_,args,{ dataSources})=>{
return dataSources.usersApi.addUsers(args);
}
Вот мой класс для обработки этого источника данных
Здесь я определяю свой класс, который выполняет функцию для возврата usersDetails
таких данных, как имя и адрес электронной почты, после входа пользователя в систему.
class UsersApi{
async getSignedUserDetails(){
if(!this.context.users){
throw new Error('Please signIn')
}
return await Users.find({_id:this.context.users.id});
}
}
Если я удалю что-либо, связанное с контекстом в других функциях в приведенном выше классе, это сработает.
Я просмотрел тон ресурсов, но пока не смог его решить. Ценю любую помощь.
Комментарии:
1. проверьте контекст в распознавателе …
signUp:async(_,args,{ dataSources, users })=>{ console.log(users);
… почему «пользователи», когда это один пользователь?2. Пользователи — это просто предпочтение в именовании, но обязательно сделают его более понятным
3. Итак, пользователи утешаются как обычно, но как мне использовать его в классе. Потому что, как я читал в документации, контекст должен присутствовать в источниках данных и наоборот.
4. да, [по документам] он должен … консоль. регистрировать весь контекст? … если это не сработает, вы можете явно передать user из resolver [с аргументами, как обычно]
5. Итак, я попробовал console.log(context), и он вернул [object Object] . Затем я передал объект users непосредственно решателям и получил к нему доступ в классе, и это сработало. Мне не нравится этот метод, но сейчас у меня нет выбора. Спасибо