#node.js #vue.js #vuetify.js
Вопрос:
У меня есть node.js сервер, настроенный для проекта vuetify. На моем сервере я анализирую csv-файл, в котором содержится информация о расписании и времени. В моем проекте vuetify есть ли способ получить данные из csv-файла в зависимости от времени использования клиента?
Комментарии:
1. Пожалуйста, приведите пример. Как я это вижу — у вас есть информация о времени в CSV-07:00 Завтрак; 08:00 Выход на работу; 12:00 Обеденный перерыв. И вы хотите получить разные результаты, в зависимости от времени доступа к сайту. Так что, если я получу доступ к нему около 7, я получу обратно «Завтрак», если около 12, я получу обратно обеденный перерыв. Это правильно?
2. @IvanShulev это правильно!
Ответ №1:
Хорошо, давайте приведем пример.
Насколько я понимаю, в вашем CSV-файле есть следующая информация:
Time,Activity
07:00,Breakfast
08:00,Go to work
12:00,Lunch break
Поскольку вы не указали, я буду использовать пример синтаксического анализатора, который будет помещать все строки, как объекты, в массив:
[
{ Time: '07:00', Activity: 'Breakfast' },
{ Time: '08:00', Activity: 'Go to work' },
{ Time: '12:00', Activity: 'Lunch break' }
]
Вам нужно отправить эту информацию своим клиентам, поэтому, предполагая, что вы используете Экспресс, вы можете использовать что-то вроде:
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
в справку о ПОЛУЧЕНИИ с часовым парамом. Другой вариант заключается в том, чтобы позволить серверной части определить час запроса, используя объект даты, но это более гибко для клиента. Это также позволит избежать проблем с различными часовыми поясами, учитывая, что ваши клиентские запросы поступают из разных часовых поясов, чем тот, в котором работает ваш сервер.
Предполагая, что вы используете axios в своем приложении Vue, самый простой способ получить расписание-вызвать 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, не говоря уже о самой логике домена, которая зависит от вашего конкретного случая. Это всего лишь простой пример. Я надеюсь, что это поможет направить вас в правильном направлении!