我正在用 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
完成之前。这些是异步函数,需要使用callback
、promise
或async/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/