node.js - Mongoose.findOneAndUpdate 无法运行
问题描述
所以我正在使用graphql服务器,我正在尝试对facebook的服务器进行异步/等待外部调用。
问题是所有这些信息都会返回,但不会保存到数据库中。我怎么知道它会回来?如果我使用findOne
而不是findOneAndUpdate
我可以console.log
所有信息并成功查看它,但是一旦我切换回来,我什至不会收到错误。
我查看了 mongoose 文档并尝试findOneAndUpdate
正确应用,但它只是嘲笑我没有错误,它什么也没做。
如果有人可以给我一些建议,那么这里的任何方式都是我的代码,我将不胜感激。
第一组是findOne
我知道可以 100% 使用但不保存或更新文档的代码。
第二个是当我尝试使用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}
),
},
解决方案
您将 async/await 与 Promise 混合使用。您应该选择一种方法(我建议 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);
}
}
推荐阅读
- python - 通过 Selenium 使用 GeckoDriver Firefox 已丢弃浏览上下文
- c++ - C ++:为结构中的每个成员执行方法调用的方法
- mysql - 如何从 Postgresql 中检索外键信息
- javascript - 如何从电子表格中请求用户对文件绑定脚本的许可?
- java - 片段滑动无需重新创建和重叠
- sql - ORA-01843: 无效的月份和 ORA-00907: 缺少右括号
- python - sns.lmplot KeyError 与 CSV 文件导入
- r - 合并表表头(library(formattable))
- php - joomla php从高到低排序数组
- std - 为什么 std::map 有双向迭代器类型?