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

标签 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 中“工作目录”的值时,它会显示为未定义

感谢您的任何帮助,谢谢。

最佳答案

您当前的代码特别有问题。 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;
}

关于javascript - 如何在函数生成的两个文件之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56585558/

相关文章:

javascript - 淡入淡出 Div

javascript - 获取选择选项php的值

javascript - 在多个操作中使用相同的 jQuery

javascript - 在 Javascript 中模拟点击事件

node.js - 关闭浏览器选项卡 nodejs

ios - 如何更改 Void 函数内部变量的值?

node.js - 在 Express 的自定义错误处理程序中获取堆栈跟踪?

javascript - 使用 Node CRON作业调用自己的请求

javascript - 将参数传递给并执行存储在数组中的全局函数

C:参数中的 float ,返回类型为空白或错误