我已到處尋找解決此問題的答案,並嘗試了不同的建議,但我仍然無法弄清楚。異步/等待請求內部護照策略
我在創建新的SteamStrategy後使用了帶有護照的蒸汽API策略,我有一個處理我的MongoDB集合的回調函數。我基本上只是檢查當前登錄的用戶是否在數據庫中,如果沒有,然後創建一個新的用戶和.save()它到mongoDB。
這一切都工作得很好,直到我決定我想向蒸汽API請求()一些額外的用戶信息,我可以存儲到新的用戶。但是,當我嘗試將request()保存到變量和console.log()變量時,它始終表示爲null。我知道這是因爲它是異步運行的,但這就是爲什麼我使用等待,但沒有成功。我也嘗試過實現一種回調 - 地獄類型的解決方案,但遇到了一些嚴重的範圍問題,我最終聲明爲「return done(null,user);」
反正。如果有人能解釋我的問題並提供解決方案,那就太棒了,謝謝!
passport.use(
new SteamStrategy(
{
returnURL: keys.returnURL,
realm: keys.realm,
apiKey: keys.steamAPI,
proxy: true
},
async function(identifier, profile, done) {
const existingUser = await User.findOne({
steamInfo: { id: profile._json.steamid }
});
if (existingUser) {
middleware.updateMongo(existingUser);
return done(null, existingUser);
}
////////////////////////THE PROBLEM STARTS HERE/////////////////////
const steamURL = "hiding url for post";
const info = await request(steamURL, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(JSON.parse(body)); //THIS PRINTS OUT THE INFO PERFECTLY
return JSON.parse(body);
}
});
console.log(info); //THIS WILL ALWAYS SHOW AS NULL OR UNDEFINED
const user = await new User({
steamInfo: {
id: profile._json.steamid,
persona: info.personaname,
profileUrl: info.profileurl,
avatar: info.avatarmedium,
personaState: info.personastate,
visibility: info.communityvisibilitystate,
countryCode: info.loccountrycode
},
collectedInfo: { rank: "", reports: "0" }
}).save();
return done(null, user);
}
)
);
我將如何返回沒有回調的身體呢? – Phillip
@PhillipR承諾解決響應主體。如果您需要響應代碼,但您不得不添加更多選項,但我不記得您需要atm的哪些選項。檢查文檔。 – spicypumpkin
@PhillipR基本上,在我的代碼中'info'是響應體。 – spicypumpkin