我目前正在尝试使用http将数据修补到Firestore数据库。我试图在不使用外部服务器的情况下做到这一点,所以使用Firebase主机和函数。
首先,我初始化了Firebase项目,并将express、body解析器和Firebase函数助手导入到这些函数中。
然后我把这个添加到我的firebase.json中,所以源链接到了的确切函数
"rewrites": [
{
"source": "/api/v1/**",
"function": "webApi"
}
]
其次,我编写了这个类型脚本,应该将数据从HTTP补丁上传到Firestore数据库。这存储在函数/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');
}
})
但是当我使用poster将数据修补到https://my-project.com/api/v1/document-id它给出一个404错误,包含:"无法PATCH/api/v1/XXX">
我反复检查我有确切的文档Id,并检查我是否有正确的JSON数据。有人认识那位牧师吗?请帮帮我?
您的URL与您的路线不匹配。您的路线设置为在匹配/传感器/*的路径上触发:
app.patch('/sensor/:sensorId', async(req, res) => {
但你的URL路径上甚至没有"传感器":
/api/v1/OaSmA27EGQV3urL6fO9g
你应该调整你的路径以匹配你的路线所处理的内容。也许你的意思更像这样:
/api/v1/sensor/OaSmA27EGQV3urL6fO9g