Наблюдайте за изменениями файла с помощью node.js
У меня есть следующий UseCase:
A создает чат и приглашает B и C - на сервере A создает файл. A, B и C записывают сообщения в этот файл. A, B и C читать этот файл.
Я хочу создать файл на сервере и наблюдать за этим файлом, если кто-то еще что-то записывает в этот файл, отправляет новый контент обратно через веб-сокеты.
Таким образом, любое изменение этого файла должно наблюдаться моим приложением node.js.
Как я могу наблюдать за изменениями файлов? Возможно ли это с узлом js без блокировки файлов?
Если это невозможно с файлами, будет ли это возможно с объектом базы данных (NoSQL)
3 ответа
Хорошей новостью является то, что вы можете наблюдать за обменом файлами с помощью Node API.
Чтение документации по API Node.js очень полезно при выяснении этих вещей. Это бесценный источник.:)
Это, однако, не дает вам доступа к содержимому, которое было записано в файл. Вы можете использовать fs.appendFile();
Функция так, что когда что-то записывается в файл, вы отправляете событие чему-то еще, что "записывает" ваши новые данные, которые записываются.
fs.watch():
Прямо вставлены из документов
fs.watch('somedir', function (event, filename) {
console.log('event is: ' + event);
if (filename) {
console.log('filename provided: ' + filename);
} else {
console.log('filename not provided');
}
});
Читайте здесь о fs.watch (); функция
РЕДАКТИРОВАТЬ: Вы можете использовать функцию
fs.watchFile();
Читайте здесь о fs.watchFile (); функция
Это позволит вам посмотреть файл на предмет изменений. То есть. всякий раз, когда к нему обращаются какие-либо другие процессы любого рода.
Также вы можете использовать node-watch. Вот простой пример:
const watch = require('node-watch')
watch('README.md', function(event, filename) {
console.log(filename, ' changed.')
})
Я не думаю, что вам нужно наблюдать за изменениями файлов или использовать для этого базу данных NoSQL (если вы этого не хотите). Мой совет будет смотреть на события( шаблон Observer). Существует более чем достаточно учебников по этой теме, доступных в Интернете (Google). Например, статья Феликса об использовании EventEmitters
Эта семантика публикации / подписки также может быть достигнута с помощью NoSQL. Например, в Redis вы должны взглянуть на pubsub.
В MongoDB я думаю, что настраиваемые курсоры - это то, что вы ищете. В их блоге есть пост, объясняющий pub / sub.