处理从 Firebase 托管转发到 Cloud Functions 的 HTTP 请求
Handling HTTP requests forwarded from Firebase Hosting to Cloud Functions
我目前正在尝试使用 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 数据。有人知道遮阳篷吗,请帮帮我?
您的 URL 与您的路线不符。您的路线设置为在匹配 /sensor/*:
的路径上触发
app.patch('/sensor/:sensorId', async(req, res) => {
但是你的 URL 在它的路径中甚至没有 "sensor":
/api/v1/OaSmA27EGQV3urL6fO9g
您应该调整您的路径以匹配您的路线所处理的内容。也许您的意思更像是这样:
/api/v1/sensor/OaSmA27EGQV3urL6fO9g
我目前正在尝试使用 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 数据。有人知道遮阳篷吗,请帮帮我?
您的 URL 与您的路线不符。您的路线设置为在匹配 /sensor/*:
的路径上触发app.patch('/sensor/:sensorId', async(req, res) => {
但是你的 URL 在它的路径中甚至没有 "sensor":
/api/v1/OaSmA27EGQV3urL6fO9g
您应该调整您的路径以匹配您的路线所处理的内容。也许您的意思更像是这样:
/api/v1/sensor/OaSmA27EGQV3urL6fO9g