Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как дописать данные в файл в Node.js

Короткий ответ

appendFile() добавляет текст в конец файла и создаёт файл, если его нет:

import { appendFile, readFile } from 'node:fs/promises';
 
await appendFile('visits.txt', 'Anna\n');
await appendFile('visits.txt', 'Oleg\n');
 
console.log(await readFile('visits.txt', 'utf8'));

Результат:

Anna
Oleg

Простой лог

Добавляйте к каждой строке время и сообщение:

import { appendFile, readFile } from 'node:fs/promises';
 
const log = (message) => appendFile('app.log', `${new Date().toISOString()} ${message}\n`);
 
await log('Server started');
await log('User logged in');
 
const lines = (await readFile('app.log', 'utf8')).trim().split('\n');
console.log(lines.length, lines[1].endsWith('User logged in'));

Результат:

2 true

Много записей

Для частых записей откройте поток один раз, вместо того чтобы каждый раз открывать файл:

import { createWriteStream } from 'node:fs';
import { readFile } from 'node:fs/promises';
import { once } from 'node:events';
 
const stream = createWriteStream('numbers.txt', { flags: 'a' });
for (let i = 1; i <= 3; i++) stream.write(`line ${i}\n`);
stream.end();
await once(stream, 'finish');
 
console.log(await readFile('numbers.txt', 'utf8'));

Результат:

line 1
line 2
line 3

Частая ошибка

appendFile() сам перевод строки не добавляет. Без \n строки слипаются:

import { appendFile, readFile } from 'node:fs/promises';
 
await appendFile('names.txt', 'Anna');
await appendFile('names.txt', 'Oleg');
 
console.log(await readFile('names.txt', 'utf8'));

Результат:

AnnaOleg

Функции из этого ответа

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.