Функция fs.writeFileSyn c не записывает данные в файл при включении в качестве модуля - PullRequest
0 голосов
/ 03 мая 2020

Рассмотрим следующее:

conversations.json: []

db.js:

let fs = require('fs');

let conversations = require('./conversations.json');

function addConversation(conversation){
    console.log(conversations);
    conversations.push(conversation);
    try{
        fs.writeFileSync('conversations.json', JSON.stringify(conversations));  
    }
    catch(err){
        console.error('Parse/WriteFile Error', err)
    }
}

module.exports = {
    addConversation
}


app.js:

let database = require('./db.js');

database.addConversation(
    {
        key1: '1233',
        key2: '433',
        key3: '33211'
    }
);

Выполнение: node app.js

Ошибка не вызывается. Все скомпилировано, как и ожидалось. Проблема в том, что conversations.json не обновляется после вызова функции addConversation из app.js.

Интересно то, что после вызова addConversation в db.js все работает отлично и conversations.json обновляется.

Что мне не хватает?

1 Ответ

2 голосов
/ 03 мая 2020

Чего мне не хватает?

Возможно, при загрузке в качестве модуля вы записываете файл в неправильный каталог.

Когда вы делаете это:

fs.writeFileSync('conversations.json', JSON.stringify(conversations));

Это записывает conversations.json в текущий рабочий каталог, который может быть или не быть каталогом вашего модуля. Если вы хотите, чтобы он был записан в каталог вашего модуля, где это:

let conversations = require('./conversations.json');

, из которого он будет прочитан, то вам нужно использовать __dirname для создания подходящего пути.

fs.writeFileSync(path.join(__dirname, 'conversations.json'), JSON.stringify(conversations));

require() автоматически просматривает каталог текущего модуля при использовании ./filename, но fs.writeFileSync() использует текущий рабочий каталог, а не каталог вашего модуля.

...