我正在尝试将文本从txt文件分配给节点中的变量,但它给出了“未定义”错误。我在做什么错了?
const fs = require('fs');
const floor = 0;
const text = fs.readFile('./aaa.txt', (err, data) => {
if (err) {
console.log('errrrrroorrrrr!');
}
text = data.toString();
})
console.log(text);
答案 0 :(得分:6)
您尝试两次分配相同的const text
。您可以做的是:
const fs = require('fs');
fs.readFile('./aaa.txt', (err, data) => {
if (err) {
console.log('errrrrroorrrrr!');
}
const text = data.toString();
console.log(text);
})
或者,就像@bhuvnesh pattnaik提到的那样,您可以这样做:
let text = ``;
const textRead = fs.readFile('./aaa.txt', (err, data) => {
if (err) {
console.log('errrrrroorrrrr!');
}
text = data.toString();
});
console.log(text); //console output is ''
但请谨慎使用此选项,因为readFile
中的回调不会立即发生,并且在您需要时该值可能仍不存在。
答案 1 :(得分:3)
首先,您正在使用回调,因此,当您执行console.log
时,读取操作可能尚未完成。
另一个问题是您试图重新分配text
常量。您不能重新分配常量。
我建议使用fs.readFileSync
来同步读取文件(如果您有大文件,请不要这样做)。
const text = fs.readFileSync('./aaa.txt', 'utf8');
如果文件很大,则必须像这样在回调中继续执行逻辑:
fs.readFile('./aaa.txt', (err, data) => {
if (err) {
console.log('errrrrroorrrrr!');
}
const text = data.toString();
console.log(text);
})
答案 2 :(得分:2)
在您的代码中,
文本是const类型,因此您无法为其重新分配值,
将文本设为let或var
OR
在内部使用另一个变量来分配数据。toString()
您应该执行以下操作:
let text = ``;
const textRead = fs.readFile('./aaa.txt', (err, data) => {
if (err) {
console.log('errrrrroorrrrr!');
}
text = data.toString();
});
答案 3 :(得分:1)
您应该只在异步功能中使用它。
import fs from 'fs';
const text = await fs.promises.readFile('./aaa.txt');