NodeJS 404 Not Found HTTP Post Request(无法发布)

kzmpq1sx  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(115)

我已经在这个问题上纠结了好几天了:我正在尝试编写一个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

7gs2gvoe

7gs2gvoe1#

这看起来像是你用一个express应用部署了一个函数,它捕获了URL路径“/uploadConsultation/uploadConsultation”。这是因为你将函数命名为“uploadConsultation”,express应用需要一个嵌套路径“uploadConsultation”。
如果你想要在CURL请求中提供的URL路径,你的Express应用程序应该寻找路由“/”

app.post('/', async(req,res) => { ... })

字符串

相关问题