У меня проблемы с выполнением запросов из облачных функций с использованием параметров запроса для построения запроса HTTP-вызовов. В прошлом я выполнял запросы из облачных функций без ошибок. Моя проблема возникает, когда я пытаюсь выполнить запрос, используя параметры, полученные из запроса.
Когда я жестко кодирую местоположение документа в функции, он работает нормально, но когда я пытаюсь построить запрос, он возвращает код состояния 200. Я также зарегистрировал встроенный запрос, и он правильно выходит из системы. но данные не возвращаются. Он возвращает данные только тогда, когда путь документа жестко закодирован. См. Код ниже.
Query looks like this
https://us-central1-<project-id>.cloudfunctions.net/getData/CollectionName/DocumentName
export const getData = functions.https.onRequest((request, response) => {
const params = request.url.split("/");
console.log("the params 0 "+params[0]);
console.log("the params 1 "+params[1]);
console.log("the params 2 "+params[2]);
//Build up the document path
const theQuery = "\'"+params[1]+"\/"+params[2]+"\'";
console.log("the query "+theQuery); <-- logs out right result in the form 'Collection/Document'
//Fetch the document
const promise = admin.firestore().doc("\'"+params[1]+"\/"+params[2]+"\'").get() <---- This doesnt work, building the query
//const promise = admin.firestore().doc('collectionName/DocID').get() <---- This hard coded and it works
promise.then(snapshot => {
const data = snapshot.data()
response.send(data)
}).catch(error => {
console.log(error)
response.status(500).send(error);
})
});
Я попытался использовать другой подход и присвоить полям данных имена, как показано ниже
Query looks like this
https://us-central1-<project-id>.cloudfunctions.net/getData?CollectionName=CName&DocumentID=Dname
export const getData = functions.https.onRequest((request, response) => {
const collectName = request.query.CollectionName;
const DocId = request.query.DocumentName;
//Build up the document path
const theQuery = "'"+collectName+"\/"+collectName+"'";
console.log("the query "+theQuery); <---Logs out correct result
//Fetch the document
const promise = admin.firestore().doc(theQuery).get() <-- Building the query does not work
//const promise = admin.firestore().doc('collectionName/DocID').get() <---- This hard coded and it works
promise.then(snapshot => {
const data = snapshot.data()
response.send(data)
}).catch(error => {
console.log(error)
response.status(500).send(error);
})
});
В обоих случаях, когда запрос строится из URL, он не возвращает никаких данных и не возвращает никаких ошибок. И я уверен, что документы, которые я пытаюсь получить, существуют в базе данных. Я что-то упустил?