如何在node js express server中每午夜更新日期变量以从新集合`data-${date}`中获取

lpwwtiir  于 2023-06-05  发布在  Node.js
关注(0)|答案(2)|浏览(102)

我有一个express server服务器,我需要从firebase获取新的集合,该集合的格式为data-${date}。如何使用节点调度(或其他方法)来完成此任务。
代码主要是格式

let date=new Date();

app.get("/fetch",(req,res) => {
        // fetch data from firestore db `data-${date}`
}

tldr:date变量需要在每个午夜更新

u2nhd7ah

u2nhd7ah1#

您可以在Node Js Express Server中的每个午夜更新日期,以便从新集合中获取

const express = require("express");
const admin = require("firebase-admin");
const moment = require("moment");

const app = express();

admin.initializeApp({
  credential: admin.credential.cert("path/to/serviceAccountKey.json"), // 
  Replace with the path to your service account key file
});

const db = admin.firestore();

const baseCollectionName = "data";

let currentDate = moment().format("YYYY-MM-DD");

const fetchData = () => {
 const collectionName = `${baseCollectionName}-${currentDate}`;

 const collectionRef = db.collection(collectionName);

// Perform your desired operations on the collection here (e.g., fetching 
data)
 // ...
};

// Function to update the currentDate variable at midnight
const updateDateAtMidnight = () => {
 const nextMidnight = moment().endOf("day");
 const duration = moment.duration(nextMidnight.diff(moment()));

 const millisecondsUntilMidnight = duration.asMilliseconds();

 setTimeout(() => {
    currentDate = moment().format("YYYY-MM-DD");
    updateDateAtMidnight();
 }, millisecondsUntilMidnight);
};

updateDateAtMidnight();

app.get("/fetch", (req, res) => {
  fetchData();
});

app.listen(3000, () => {
 console.log("Server started on port 3000");
});
gpfsuwkq

gpfsuwkq2#

节点调度程序与许多其他调度程序一样,基于cronJobs。
因此需要定义一个cronSettings

const cronSettings = '0 0 * * *'
// attach your function to the scheduler

const scheduledJob = schedule.scheduleJob(cronSettings , functionToUpdate)

您似乎使用了express端点,如果您还想手动触发,这是可以的。

const functionToUpdate = (req, res){
   // doing something
}

app.get("/fetch",functionToUpdate)

希望能有所帮助
巴林特

相关问题