Не удается получить доступ к this.context внутри определенного класса и источникам данных apollo-server-express

#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 непосредственно решателям и получил к нему доступ в классе, и это сработало. Мне не нравится этот метод, но сейчас у меня нет выбора. Спасибо