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

时间:2021-07-20 18:04:02

标签: node.js vue.js vuetify.js

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

1 个答案:

答案 0 :(得分:1)

好的,让我们举个例子。

据我所知,您的 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,更不用说域逻辑本身,这取决于您的具体情况。这只是一个简单的例子。我希望它有助于引导您朝着正确的方向前进!