无法将文本分配给Node中的const

时间:2019-11-01 09:22:13

标签: javascript node.js

我正在尝试将文本从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);

4 个答案:

答案 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');