在同步写入完成之前尝试读取文件的节点

时间:2016-04-05 17:48:40

标签: javascript node.js fs

我正在尝试使我的程序尝试读取配置文件,如果配置文件不存在,程序将从config.example.js生成新的配置文件,然后需要新的生成的文件。但是,我遇到了一个问题 - 即使使用fs.writeFileSync(),在“同步”写入完成之前,Node似乎正在运行config = require('config.js');,因为它与Cannot find module './config.js'崩溃。

以下是相关代码:

var config;
//Create new config file if one not found
try {
    config = require('./config.js');
} catch (e){
    fs.writeFileSync('./config.js', fs.readFileSync('./config.js.example'));
    console.log("New config file config.js created");
    config = require('./config.js');  //Line it crashes on
}

1 个答案:

答案 0 :(得分:1)

这是因为缓存使用require的方式。因为第一个失败,第二个失败,直到事件循环清除。试试这种方式。

if (fs.existsSync('/config.js')) {
    config = require('./config');
} else {
    fs.writeFileSync('./config.js', fs.readFileSync('./config.js.example'));
    config = require('./config');
}