我是NodeJ的新手。我正在尝试将文件读入变量。 这是我的代码。
var fs = require("fs"),
path = require("path"),
util = require("util");
var content;
console.log(content);
fs.readFile(path.join(__dirname,"helpers","test.txt"), 'utf8',function (err,data) {
if (err) {
console.log(err);
process.exit(1);
}
content = util.format(data,"test","test","test");
});
console.log(content);
但每次我运行脚本我都会
undefined
和undefined
我缺少什么?求救!
答案 0 :(得分:5)
如您问题中的评论中所述,节点是异步的 - 意味着在调用第二个console.log
函数时,您的函数尚未完成执行。
如果在读取文件后在回调中移动日志语句,则应该看到输出的内容:
var fs = require("fs"),
path = require("path"),
util = require("util");
var content;
console.log(content);
fs.readFile(path.join(__dirname, "helpers", "test.txt"), 'utf8', function (err, data) {
if (err) {
console.log(err);
process.exit(1);
}
content = util.format(data, "test", "test", "test");
console.log(content);
});
即使这会解决您的问题,但如果不了解节点的异步性质,您将会遇到很多问题。
This similar stackoverflow answer详细介绍了其他替代方案的可用性。
答案 1 :(得分:1)
或如下所述:
const fs = require('fs');
const doAsync = require('doasync');
doAsync(fs).readFile('./file.txt')
.then((data) => console.log(data));
答案 2 :(得分:0)
以下代码片段使用ReadStream。它以分开的块读取数据,如果数据文件较小,它将以单个块读取数据。但是,这是一个异步任务。因此,如果您想对数据执行任何任务,则需要将它们包括在ReadStream部分中。
var fs = require('fs');
var readStream = fs.createReadStream(__dirname + '/readMe.txt', 'utf8');
/* include the file directory and file name instead of <__dirname + '/readMe.txt'> */
var content;
readStream.on('data', function(chunk){
content = chunk;
performTask();
});
function performTask(){
console.log(content);
}
使用同步任务还有另一种简单的方法。由于这是一个同步任务,因此您无需担心其执行情况。与异步任务不同,该程序仅在执行当前行后移至下一行。 以下链接提供了更清晰,详细的答案:
var fs = require('fs');
var content = fs.readFileSync('readMe.txt','utf8');
/* include your file name instead of <'readMe.txt'> and make sure the file is in the same directory. */