在这里,我试图通过提供UID从实时数据库访问用户数据。我已经尝试了很多东西,但是都没有成功。我已经按照文档操作,但是运气不好,我一直在出错-
Sending back results [promise]
另一个example用来编写我用来创建逻辑的数据,但是它没有用-
service.ts:160 POST https://us-central1-gokuapp.cloudfunctions.net/userData 500
error.ts:66 Uncaught (in promise) Error: INTERNAL
at new YN (error.ts:66)
at XN (error.ts:175)
at rC.<anonymous> (service.ts:231)
at tslib.es6.js:100
at Object.next (tslib.es6.js:81)
at r (tslib.es6.js:71)
我在客户端遇到的错误是-
{{1}}
编辑:之前,我已经正确地编写了代码,但是根据在发现过程中所做的更改,我得到了错误或空对象。曾经遇到过同样问题的任何人,只要记住这一点……“云功能需要时间热身才能完全发挥作用”,尽管我非常感谢@Frank van Puffelen和@oug Stevenson供他们输入。 :) :) :)
答案 0 :(得分:2)
请勿在Cloud Functions中使用on()
,因为这会将持久性侦听器附加到查询(并且不会返回承诺)。改用once()
一次查询数据,并用快照保证解决问题。另外,您应该使用snapshot.val()
来获取包含快照内容的普通JavaScript对象。
return ref.once('value') // use once() here
.then(snapshot => {
return {
data: snapshot.val() // also use val() here to get a JS object
};
})
.catch((error) => {
throw new functions.https.HttpsError('unknown', error.message, error);
});
答案 1 :(得分:0)
可调用云函数可以返回任何JSON数据。但是,您的app.post('/by-pass-api',function(req, response){
const url = req.body.url;
console.log("calling url", url);
request.get(
url,
(error, res, body) => {
if (error) {
console.error(error)
return response.status(200).json({'content': "error"})
}
return response.status(200).json(JSON.parse(body))
},
)
})
变量是const options = {
method: 'POST',
headers: {'content-type': 'application/json'},
url:`http://localhost:3000/by-pass-api`, // your environment
data: { url }, // your https request here
};
对象,它不仅包含JSON数据,还包含更多内容。
您可能希望返回快照的值:
snapshot