【发布时间】:2021-08-14 14:00:01
【问题描述】:
在 Axios 中使用 Firebase 函数。只是尝试遍历对象的响应对象并将每个子对象作为 Firestore Doc 存储在集合中。
日志显示以下错误:
错误:参数“data”的值不是有效的 Firestore 文档。输入不是普通的 JavaScript 对象。
在 Object.validateDocumentData (/workspace/node_modules/@google-cloud/firestore/build/src/write-batch.js:576:15)
在 CollectionReference.add (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1964:23)
在 /workspace/index.js:35:18
在 Array.map()
在 /workspace/index.js:34:14
在 processTicksAndRejections (internal/process/task_queues.js:97:5)
代码如下:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const axios = require("axios");
admin.initializeApp();
const db = admin.firestore();
exports.scheduledFunction = functions.pubsub
.schedule("every 2 minutes")
.timeZone("America/New_York")
.onRun(async (context) => {
try {
const querySnapshot = await
db.collection("my_collection").get();
const promises = querySnapshot.docs.map((doc) =>
db.collection("my_collection").doc(doc.id).delete());
await Promise.all(promises);
const Options = {
method: "get",
url: "...",
headers: {
"Cookie": "...",
"Content-Type": "application/json",
},
};
const axiosResponse = await axios(Options);
const axiosData = axiosResponse.data;
const parsedAxiosResponse = axiosData["news_results"];
const documentCreationPromises = parsedResponse
.map(() => db.collection("my_collection")
.add(parsedAxiosResponse));
await Promise.all(documentCreationPromises);
return null;
} catch (error) {
console.log(error);
return null;
}
});
【问题讨论】:
-
你能
console.log(parsedResponse)分享输出吗? -
parsedResponse从未在您共享的代码中声明或初始化,这意味着您应该在parsedResponse.map(...)上收到错误。 -
@FrankvanPuffelen - 这对我来说是一个不相关的类型。现在在上面修复。
-
那么
parsedAxiosResponse是什么?如果是字符串 (json / html / xml, ...) 而不是 Javascript 对象(解析后的 JSON),显然它不能作为文档存储到 Firestore。并且仍然没有在任何地方定义parsedResponse,即使您将它映射为应该是一个数组。 -
console.log of parsedAxiosResponse 显示 [object Object]、[object Object]、[object Object] 等。我想我可能需要解析它。当我执行 axiosData = JSON.partse(axiosResponse.data) 时,我收到一条错误消息
SyntaxError: Unexpected token o in JSON at position 1。我对 Axios 的菜鸟理解是它会为你自动解析数据,默认返回一个 JS 对象。所以我不应该需要 json.parse,对吧?
标签: node.js firebase google-cloud-firestore axios