如何在函数生成的两个文件之间共享变量

时间:2019-06-13 17:14:24

标签: javascript node.js function variables

我正在用NodeJS编写API,但遇到了麻烦。我正在尝试使用函数来获取变量,并使用module.exports在另一个文件中使用所述变量。但是,这在控制台中一直未定义。

我已经尝试在文件的不同位置使用过return语句,但是我一直未定义。

这就是代码获取变量并将其导出的样子。

文件1(api.js)

const fs = require('fs');
const homeDir = require('os').homedir();
module.exports = {
    workingDirectory: () => {
        let dir;
        fs.access(`${homeDir}/.unitv`, fs.constants.F_OK, (err) => {
            if(err) throw err;
            fs.readFile(`${homeDir}/.unitv`, 'utf8', (readErr, data) => {
                if(readErr) throw readErr;
                let jsonData = JSON.parse(data);
                dir = jsonData.WorkingDirectory;
            });
        });
        return dir;
    }
};

文件2

const api = require('../api');
console.log(api.workingDirectory);

.unitv文件

{
    "WorkingDirectory": "/home/user/UniTV",
    "Port": "3000"
}

在控制台中,当应使用/home/user/.unitv中的“工作目录”的值进行显示时,它将以未定义的形式显示

感谢所有帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

您当前的代码特别有问题。 return dir;fs.access/fs.readFile完成之前发生。这些是异步函数,需要使用callbackpromiseasync/await样式的编码。其要点是代码在等待I / O(例如读取文件)时继续执行其他代码,并且您编写该代码的方式不会导致任何返回。有关有效的回调示例,请参见https://repl.it/@CodyGeisler/readFileCallback

workingDirectory: () => {
    let dir;
    fs.access(`${homeDir}/.unitv`, fs.constants.F_OK, (err) => {
        if(err) throw err;
        fs.readFile(`${homeDir}/.unitv`, 'utf8', (readErr, data) => {
            if(readErr) throw readErr;
            let jsonData = JSON.parse(data);
            dir = jsonData.WorkingDirectory;
        });
    });
    return dir;
}