我已经在这个问题上纠结了好几天了:我正在尝试编写一个firebase cloud函数,它可以基于HTTP post触发器更新firestore集合中的文档。我已经部署了我的firebase函数,但是当我点击URL并向其发布数据时,我总是收到一条404消息。我尝试使用postman和curl来触发它,但是我得到了同样的“404 Not Found”错误。
这是错误消息:
Error
<pre>Cannot POST /</pre>
字符串
这就是云函数:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
// upload each landbot consultation to users' firestore collection
const express = require('express');
const app = express();
app.use(express.json());
app.post('/uploadConsultation', async(req,res) => {
try{
const consultationData = req.body;
// Log the contents of the JSON file landbot has sent
console.log('JSON Package sent from Landbot:', consultationData);
// Identify the location of the "users" firestore collection
const firestore = admin.firestore();
const usersCollection = firestore.collection('users');
// Extract userid and make a variable out of userid and another out of the remaining consultation data
const {userid, ...consultation} = consultationData;
// Check if users collection contains a document with the specified userid
const userDocRef = usersCollection.doc(userid);
const userDocSnapshot = await userDocRef.get();
if (userDocSnapshot.exists) {
// If the user id doc exists, add the remaining consultation data as a map field
await userDocRef.update({consultation: consultationData});
console.log('Added consultation data to user collection document:', );
} else {
// If user id doc doesn't exist, show error message
console.log('There is no document in the users collection with that userid');
res.status(422).send('No user exists with this userid');
}
} catch(error) {
//handle errors using logs and sending error responses to landbot
console.error('Error uploading consultation data');
res.status(500).send('Error uploading consultation data to firestore');
}
});
// Register onRequest handler
exports.uploadConsultation = functions.https.onRequest(app);
型
这是curl请求:
curl -X POST "http://us-central1-xxx.cloudfunctions.net/uploadConsultation" -H "Content-Type: application/json" -d '{"email": "[email protected]","userid": "ofAkmWfs73OlRLvlsZ5m9nC1t5t1","answers": {"@me_minime": "Me","@hair_challenges": "Dry hair, Breakage","@current_state_of_hair": "Natural","@curl_type": "Type 4C","@retailer": "Uche"}}'
型
我已经检查了所有明显的事情,并击中了一堵墙,下一步该怎么办。我击中的网址是复制粘贴完全从我的终端,所以没有问题(模糊的projectID为隐私的原因)。
我也不像是输入了函数,因为日志中什么都没有显示(函数中的第一条语句是打印日志消息),看起来像是没有找到url端点,而404错误是由实际代码的问题引起的。
每次我写“firebase deploy --only functions”命令时,我都没有在终端中看到任何错误消息,说明函数没有正确部署。事实上,我已经要求firebase列出正在运行的函数,uploadConsultation函数也在那里列出。
有什么想法下一步该怎么做吗?可能是身份验证的问题,只是返回一个一般的404错误?或者其他什么?这是我第一次使用firebase,所以不知道下一步该怎么做,或者是否有一些设置步骤我错过了。
Thanks in advance
1条答案
按热度按时间7gs2gvoe1#
这看起来像是你用一个express应用部署了一个函数,它捕获了URL路径“/uploadConsultation/uploadConsultation”。这是因为你将函数命名为“uploadConsultation”,express应用需要一个嵌套路径“uploadConsultation”。
如果你想要在CURL请求中提供的URL路径,你的Express应用程序应该寻找路由“/”
字符串