Node.js/Vuetify-有没有办法根据时间从服务器获取数据?

Node.js/Vuetify- Is there a way to get data from server based on time?

我为 vuetify 项目设置了一个 node.js 服务器。在我的服务器中,我正在解析一个 csv 文件,其中包含有关日程安排和时间的信息。在我的 vuetify 项目中,有没有办法根据客户端的使用时间从 csv 中获取数据?

好的,我们来看一个例子。

据我了解,您的 CSV 文件中包含以下信息:

Time,Activity
07:00,Breakfast
08:00,Go to work
12:00,Lunch break

由于您没有指定,我将使用 example parser,它将所有行作为对象推送到一个数组中:

[
   { Time: '07:00', Activity: 'Breakfast' },
   { Time: '08:00', Activity: 'Go to work' },
   { Time: '12:00', Activity: 'Lunch break' }
]

您需要将该信息发送给您的客户,因此假设您使用的是 Express,您可以使用以下内容:

const csv = require('csv-parser');
const fs = require('fs');
const express = require('express');
const app = express();
const timeSchedule = [];

function parseCsv() {
    return new Promise((resolve, reject) => {
        fs.createReadStream('data.csv')
        .pipe(csv())
        .on('data', (data) => timeSchedule.push(data))
        .on('error', (err) => reject(err))
        .on('end', () => {
            csvParsed = true;
            resolve();
        });
    }
}

app.get('/scheduled-for/:hour', function (req, res) {
    // You need to come up with the logic for your case
    // As an example, I will assume that if I make a request at any time
    // between 7 and 8, I will get "Breakfast"
    // between 8 and 9 - "Go to work"
    // between 12 and 13 - "Lunch break"
    parseCsv().then(() => {
        res.json(timeSchedule.find(row => row.Time.startsWith(req.params.hour)))
    })

})

请注意,以上所有内容都发生在 Nodejs 服务器上。

从客户端,您必须使用小时参数调用 scheduled-for GET 句柄。另一种选择是允许后端通过使用 Date 对象来确定请求的时间,但上面的方法对于客户端来说更灵活。它还将避免不同时区的问题,因为您的客户端请求来自与您的服务器所在的不同时区。

假设您在 Vue 应用程序中使用 axios,获取时间表的最简单方法是在您的组件中调用 API:

new Vue({
  el: '#app',
  data () {
    return {
      activity: null
    }
  },
  mounted () {
    axios
      .get('https://urlToYourApi/v1/scheduled-for/' + new Date().getHours())
      .then(schedule => {
          if (schedule) {
              this.activity = schedule.Activity;
          }
          else {
              console.log("No activity found for this hour!");
          }
      }
  }
})

此代码用于生产!您需要处理许多情况,例如 new Date().getHours() 返回个位数小时数、CSV 解析,更不用说领域逻辑本身了,这取决于您的具体情况。这只是一个简单的例子。希望对您有所帮助!