fs.writeFileSync函数作为模块包含在文件中时不会写入文件

时间:2020-05-03 00:00:13

标签: node.js fs

请考虑以下内容:

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 个答案:

答案 0 :(得分:2)

我想念什么?

可能是作为模块加载时,您正在将文件写入错误的目录。

执行此操作时:

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()使用当前的工作目录,而不是模块的目录。