处理从Firebase托管转发到云功能的HTTP请求

时间:2020-03-24 17:39:24

标签: typescript firebase express google-cloud-functions firebase-hosting

我目前正在尝试使用http将数据修补到Firestore数据库中。我试图在不使用外部服务器的情况下执行此操作,因此可以使用Firebase托管和功能。

首先,我初始化了Firebase项目,并将express,body-parser和firebase-functions-helper导入到函数中。

然后我将其添加到firebase.json中,因此源链接到确切的函数

 "rewrites": [
      {
        "source": "/api/v1/**",
        "function": "webApi"
      }
    ]

第二,我写了这个打字稿,应该将数据从HTTP补丁上传到Firestore数据库。它存储在functions / src / index.ts

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import * as firebaseHelper from 'firebase-functions-helper/dist';
import * as express from 'express';
import * as bodyParser from 'body-parser';

admin.initializeApp(functions.config().firebase);
const db = admin.firestore();

const app = express();
const main = express();

main.use(bodyParser.json());
main.use(bodyParser.urlencoded({extended: false}));
main.use('/api/v1/', app);

const sensorsCollection = 'sensors';
export const webApi = functions.https.onRequest(main);

app.patch('/sensor/:sensorId', async(req, res) => {
    try{
        await firebaseHelper.firestore.updateDocument(db, sensorsCollection, req.params.sensorId, req.body);
        res.status(200).send('Update Success');
    }catch(error){
        res.status(204).send('Patch Error');
    }
})

但是当我使用邮递员将数据修补到https://my-project.com/api/v1/document-id时 它给出了404错误,其中包含:“ Cannot PATCH / api / v1 / XXX”

我再次检查了我是否有确切的文档ID,并检查了我是否具有正确的JSON数据。有人知道篷,请帮我吗?

1 个答案:

答案 0 :(得分:2)

您的URL与您的路线不匹配。您的路线设置为在与/ sensor / *匹配的路径上触发:

app.patch('/sensor/:sensorId', async(req, res) => {

但是您的网址的路径中甚至都没有“传感器”:

/api/v1/OaSmA27EGQV3urL6fO9g

您应该调整路径以匹配路线处理的内容。也许您的意思是这样的:

/api/v1/sensor/OaSmA27EGQV3urL6fO9g