В настоящее время я изучаю nodejs и vuejs и застрял на обновлениях в реальном времени. Я создал API на бэкэнде, который отправляет данные из файлов .json во фронтенд. И я хочу обновить данные во внешнем интерфейсе на случай, если некоторые данные были изменены в одном из этих файлов .json.
У меня есть контроллер с логикой API:
module.exports = {
async index (req, res) {
try {
fs.readFile('./src/assets/data.json', 'utf8', function (err, data) {
data = JSON.parse(data)
res.send(data)
})
} catch (err) {
res.status(500).send({
error: 'an error has occured trying to fetch the quests'
})
}
}
А потом я использую его в своем роутере
module.exports = (app) => {
app.get('/api/main', Controller.index)
}
На интерфейсе я делаю запрос к API через axios и получаю данные без проблем. Но я не могу понять, как обновить данные на веб-странице, если файл .json был отредактирован. Я думал о setinterval, но, думаю, делать запросы к серверу каждые n секунд - плохая практика. Тоже пытался обработать толкателем, но не получилось. И я не уверен, что он может отслеживать изменения внутри файла.
Буду признателен за любые предложения и помощь. Спасибо!
Вы можете открыть сокет с клиентом и отправить файл таким образом: socket.io. Используйте fs.watch (), чтобы увидеть, изменился ли файл.
@BennettDams, все дело в том, что проект использует определенные файлы .json, а не базу данных или какой-либо другой вариант. Это поведение нельзя изменить





Pusher - хороший способ прослушивать события изменения из внешнего интерфейса. Для бэкэнда рассмотрите возможность использования REST (ful) API вместо пустого json-файла, это легко сделать с помощью
ExpressдляNodeJS: medium.com/@onejohi/…