Обработка HTTP-запросов, пересылаемых с хостинга Firebase в облачные функции - PullRequest
0 голосов
/ 24 марта 2020

В настоящее время я пытаюсь исправить данные в базе данных Firestore, используя http. Я пытаюсь сделать это без использования внешнего сервера, поэтому с помощью Firebase Hosting and Functions.

Сначала я инициализировал свой проект Firebase и импортировал express, body-parser и firebase-functions-helper в функции.

Затем я добавил это в свою базу данных. 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 "

Я дважды проверил, у меня есть точный идентификатор документа, и я проверяю, есть ли у меня правильные JSON данные. Кто-нибудь знает awnser и, пожалуйста, помогите мне?

1 Ответ

2 голосов
/ 25 марта 2020

Ваш URL просто не соответствует вашему маршруту. Ваш маршрут настроен на запуск по путям, которые соответствуют / sensor / *:

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

Но ваш URL даже не имеет "сенсора" где-либо на своем пути:

/api/v1/OaSmA27EGQV3urL6fO9g

You должен скорректировать ваш путь, чтобы соответствовать тому, что обрабатывается вашим маршрутом. Возможно, вы имели в виду нечто большее, как это:

/api/v1/sensor/OaSmA27EGQV3urL6fO9g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...