Пн goose .findOneAndUpdate не запускается - PullRequest
0 голосов
/ 26 мая 2020

Итак, я работаю над сервером graphql и пытаюсь выполнить внешний вызов async / await на сервер facebook.

Проблема в том, что вся эта информация возвращается, но не сохраняется в db. Как я узнаю, что он возвращается? если я использую findOne вместо findOneAndUpdate, я могу console.log всю информацию и видеть ее успешно, но как только я переключаюсь обратно, я даже не получаю сообщение об ошибке.

Я посмотрел пн goose docs и попытался применить findOneAndUpdate правильно, но он просто смеется надо мной без ошибок, он просто ничего не делает.

В любом случае вот мой код, если кто-нибудь может дать мне совет, он бы действительно будут оценены.

Первый набор - это код с использованием findOne, который, как я знаю, работает на 100%, но не сохраняет и не обновляет do c.

Второй - когда я пытаюсь чтобы сделать это с помощью FindOneAndUpdate.

getFacebookPageID: {
      type: FacebookType,
      description: 'Gets all the content we want from facebook once a user has granted permissions',
      args: {
        id: { type: GraphQLString },
        accessToken: { type: GraphQLString },
        facebook: { type: InputFacebookType }
      },
      resolve: (parent, args) => User.findOne({ _id: args.id }, async (err, docs) => {
        console.log('next step is getcontent');
        // const clientId = process.env.FACEBOOK_ID;
        // const reDirectFBUri = process.env.FACEBOOK_ID_URI;
        const { accessToken } = docs.tokens.find((item) => item.kind === 'facebook');
        const userId = docs.facebookId;

        console.log(userId);
        const getFBaccounts = `https://graph.facebook.com/${userId}/accounts?access_token=${accessToken}`;
        let pages = null;
        await axios.get(getFBaccounts)
          .then((response) => {
            pages = response.data.data;
            // this above line is all the fb pages user has give us access to
            console.log('pages', response.data.data);
            const query = { _id: args.id, };
            console.log('This should be object id', query);
            User.updateOne(query, {
              pages,
            }, (err, docs) => {
              console.log('Any errors here are problems with saving!', err, docs);
            });
          })
          .catch((err) => console.log(err));


        return FacebookType;
      }
      ),
    },

Я также пробовал это ниже, и это просто даже не будет ничего записывать в консоль. Это я пытаюсь использовать findOneAndUpdate

getFacebookPageID: {
type: FacebookType,
description: 'Gets all the content we want from facebook once a user has granted permissions',
args: {
  id: { type: GraphQLString },
  accessToken: { type: GraphQLString },
  facebook: { type: InputFacebookType }
},
resolve: (parent, args) =>  User.findOneAndUpdate({ _id: args.id },{ pages:  async (err, docs) => {
  console.log('next step is getcontent');

  const { accessToken } = docs.tokens.find((item) => item.kind === 'facebook');
  const userId = docs.facebookId;

  console.log(userId);
  const getFBaccounts = `https://graph.facebook.com/${userId}/accounts?access_token=${accessToken}`;
  let pages = null;
  await axios.get(getFBaccounts)
    .then((response) => {
      pages = response.data.data;

      console.log('pages', response.data.data);

    })
    .catch((err) => console.log(err));


  return FacebookType;
}
},
{new: true}
),
},

1 Ответ

1 голос
/ 26 мая 2020

вы используете async / await в сочетании с обещаниями. Вы должны выбрать один подход (я предлагаю async / await);

resolve: async (parent, args) => {
try {
  //get user
  const user = await User.findById(args.id); //user is mongooose instance - https://mongoosejs.com/docs/api.html#document_Document-save
  const { accessToken } = user.tokens.find((item) => item.kind === 'facebook');
  const userId = user.facebookId;
  const getFBaccounts = `https://graph.facebook.com/${userId}/accounts?access_token=${accessToken}`;

  //get pages
  const fbResponse = await axios.get(getFBaccounts);

  //use mongoose prototype method "save" to update the user
  user.pages = fbResponse.data.data;
  await user.save();
  return user;
} catch(e) {
   console.log(e);
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...