# #javascript #firebase #google-cloud-firestore #google-cloud-functions #firebase-storage
Вопрос:
Я надеюсь, что кто-нибудь сможет помочь мне с ответом относительно этого кода. Это работает, но:
- Он загружает CSV-файл в облачное хранилище, но только иногда в виде синей открываемой гиперссылки.
- Если это не синий файл с гиперссылкой, это просто неопределенный файл, который можно открыть только вручную с помощью кнопки и открывается как неопределенный, на который ссылаются гиперссылки firebase.com.
- Кроме того, если я разделю это решение для двух разных коллекций firestore (отдельные отчеты), оно полностью перестанет быть гиперссылкой на данные.
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp(functions.config().firebase);
// eslint-disable-next-line max-len
exports.removeUser = functions.region("europe-west3").firestore.document("/Users/{Users_id}").onDelete(async (event, context) => {
const uid = event.id;
return admin.auth().deleteUser(uid).then(() => {
console.log("user deleted");
}).catch((err) => {
console.log("deletion failed: " err);
});
});
// eslint-disable-next-line max-len
exports.createLoanCSV = functions.region("europe-west3").firestore.document("/Reports/{Reports_id}").onCreate(async (event) => {
const fs = require("fs-extra");
const {Storage} = require("@google-cloud/storage");
const path = require("path");
const os = require("os");
const {Parser} = require("json2csv");
// eslint-disable-next-line max-len
const fields = ["fileNumber", "idNumber", "cash", "refund", "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
const opts = {fields};
const reportId = event.id;
const fileName = "reports/" reportId ".csv";
const tempFilePath = path.join(os.tmpdir(), fileName);
/* Reference Firestore Report*/
const db = admin.firestore();
const reportRef = db.collection("Reports").doc(reportId);
/* Reference Storage Bucket*/
const storage = new Storage();
const bucket = storage.bucket("shosholoza-finance-ec7fe.appspot.com");
const parser = new Parser(opts);
return await db.collection("Loans").get().then((querySnapshot) => {
const jsonData = [];
querySnapshot.forEach(async (doc)=>{
await jsonData.push(doc.data());
});
return parser.parse(jsonData);
}).then((csv) =>{
return fs.outputFile(tempFilePath, csv);
}).then(()=>{
return bucket.upload(tempFilePath, {destination: fileName});
}).then((file)=>{
console.log(file);
return reportRef.update({status: "complete"});
}).catch((err) => console.log(err));
});