我试图在第一个用户登录使用一些文本并需要API密钥的网站时使用Axios POST进行API调用。我做了基本的初始化工作,如上面的const functions = require('firebase-functions')
和var axios = require('axios')
。
exports.addSummaryMessage = functi ons.auth.user().onCreate(async (user) => {
const response = await axios.post(
'https://example.com/stuff',
{
headers: {
contentType: 'content/json',
Authorization:
'Bearer APIKEY',
},
text: 'wooooww',
}
)
await admin.firestore().collection('messages').add({
name: 'Firebase Bot',
profilePicUrl: '/images/firebase-logo.png', // Firebase logo
text: JSON.stringify(response),
timestamp: admin.firestore.FieldValue.serverTimestamp(),
})
})
在我的函数日志中,我得到类似于>addSummaryMessage的消息函数执行时间为231毫秒。完成状态:误差
我可以跟踪从API接收到的调用,它从不注册或发送回输出。所有的CORS都有request, response
,我不认为我可以用函数.auth.user().onCreate()得到它。我的API在reqbin中使用这个原始
POST /stuff
Authorization: Bearer APIKEY
Host: example.com
Accept: application/json
Content-Type: application/json
Content-Length: 30
{
"text":"wooooww"
}
EDIT:在函数中使用此文本:
var data = {}
var url =
'https://example.com'
var resp
await axios
.post(url, data, {
headers: {
contentType: 'content/json',
Authorization:
'Bearer API Key',
},
})
.then((res) => {
resp = res.data.stuff
admin.firestore().collection('messages').add({
name: 'Firebase Bot',
profilePicUrl: '/images/firebase-logo.png', // Firebase logo
text: resp,
timestamp: admin.firestore.FieldValue.serverTimestamp(),
})
})
.catch((err) => {
console.log(err)
})
编辑2我的API不需要文本来运行,它让我困惑如何通过data
将文本传递到帖子中,这对我很有效。
var userText = 'wow'
var data = {}
data['text'] = userText
var url = ....
1条答案
按热度按时间tuwxkamq1#
如果没有更多的细节,很难确定你遇到的问题。但是你提到第二个代码是有效的。
此外,我们可以看到,你是不正确的managing the life cycle of your Cloud Function:你不返回一个承诺。这通常会导致一些不稳定的行为:云函数sometimes works and sometimes not...
因此,以下应该可以工作(当然,未经测试,因为我们不知道通过Axios调用的API):