我正在用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中的“工作目录”的值进行显示时,它将以未定义的形式显示
感谢所有帮助,谢谢。
答案 0 :(得分:0)
您当前的代码特别有问题。
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;
}