【问题标题】:Undefined while reading from File从文件读取时未定义
【发布时间】:2020-02-04 21:51:21
【问题描述】:

我是 Node.js 的新手,并试图从文件中读取字符串以及文件中的数据,控制台也在打印“未定义”。每当我注释掉 readFile 函数时,这个错误/警告就会消失,所以我确定我在读取文件时做错了什么。

文件处理.js

const fs = require('fs');

function writeIntoFile(str) {
    fs.writeFile('./File.txt', str, function(err){
        if (err){

            console.log("Error occured");

            // console.log(`Unable to write into file ${err}`);
        }else{
            console.log('Written into File');
        }
    });
}

function readFromFile() {
    
    fs.readFile('File.txt', function (err, data) {
        if (err) {
           console.log(err);
        }
        console.log("Data read: " + data.toString());
     });
}

module.exports.writeIntoFile = writeIntoFile;
module.exports.readFromFile = readFromFile;

app.js

const logger = require('./logger');
const fh = require('./filehandeling');

//var mysum = logger.sum(1,2);
fh.writeIntoFile(`Sum of Numbers is 4`);
 console.log(fh.readFromFile());
// console.log(logger.sum(1,2));

输出:

PS D:\Dev\Node\FirstProject> node app.js
undefined
Written into File
Asynchronous read: Sum of Numbers is 4
PS D:\Dev\Node\FirstProject> 

【问题讨论】:

  • undefined的错误吗?你的问题不是很清楚
  • 这能回答你的问题吗? Get data from fs.readFile
  • @PaulFitzgerald 输出的第二行显示未定义,这就是我所困惑的。

标签: javascript node.js file-handling


【解决方案1】:

它打印undefined,因为您实际上是打印函数readFromFile 的返回值,它不返回任何内容。您的代码可以在您的 readFromFile 函数中正确打印 Sum of Numbers is 4 时读取您的文件。

function readFromFile() {

fs.readFile('File.txt', function (err, data) {
    if (err) {
       console.log(err);
    }
    console.log("Data read: " + data.toString());
    ^^^^^^^^^^^^^
    you are printing the correct content of your file here
 }); 
}

如果要返回文件的内容,请考虑 fs.readFile 的同步对应项,即 fs.readFileSync https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options。那你就可以了

function readFromFile() {
    return fs.readFileSync('File.txt', 'utf-8');
}

您的代码不再打印undefined

此外,您的代码有一个错字:const fh = require('./filehandeling'); 必须是 const fh = require('./filehandling');


编辑:

确实,同步readFile 现在不起作用。问题是writeFile 仍然是异步的,永远不会真正写入文件。如何解决这个问题有几种可能性。其中两个是切换到同步写入文件或给异步版本一个回调。

同步写入

文件处理.js

const fs = require('fs');

function writeIntoFile(str) {
    fs.writeFileSync('./File.txt', str);
}

function readFromFile() {
    return fs.readFileSync('File.txt', 'utf-8');
}

module.exports.writeIntoFile = writeIntoFile;
module.exports.readFromFile = readFromFile;

app.js

const fh = require('./filehandling');

fh.writeIntoFile(`Sum of Numbers is 4`);
console.log(fh.readFromFile());

回调

文件处理.js

const fs = require('fs');

function writeIntoFile(str, callback) {
    fs.writeFile('./File.txt', str, callback);
}

function readFromFile() {
    return fs.readFileSync('File.txt', 'utf-8');
}

module.exports.writeIntoFile = writeIntoFile;
module.exports.readFromFile = readFromFile;

app.js

const fh = require('./filehandling');

fh.writeIntoFile(`Sum of Numbers is 4`, err => {
    if (err) {
        throw err;
    }
    console.log(fh.readFromFile());
});

【讨论】:

  • 我已经尝试过 fs.readfileSync 功能,但它根本停止打印任何东西。
  • 是的,抱歉,代码没有按原样工作。我编辑了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多