Javascript 从文件读取时未定义

Javascript 从文件读取时未定义,javascript,node.js,file-handling,Javascript,Node.js,File Handling,我是Node.js新手,试图从文件中读取字符串和数据,控制台也在打印“未定义”。每当我注释掉readFile函数时,这个错误/警告就会消失,这样我就可以确定在读取文件时我做错了什么 filehandleing.js const fs=require('fs'); 函数writeIntoFile(str){ fs.writeFile('./File.txt',str,函数(err){ 如果(错误){ console.log(“发生错误”); //log(`无法写入文件${err}`); }否则{

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

filehandleing.js

const fs=require('fs');
函数writeIntoFile(str){
fs.writeFile('./File.txt',str,函数(err){
如果(错误){
console.log(“发生错误”);
//log(`无法写入文件${err}`);
}否则{
log(“写入文件”);
}
});
}
函数readFromFile(){
fs.readFile('File.txt',函数(err,data){
如果(错误){
控制台日志(err);
}
log(“数据读取:+Data.toString());
});
}
module.exports.writeIntoFile=writeIntoFile;

module.exports.readFromFile=readFromFile
它打印
未定义的
,因为您实际上是在打印函数
readFromFile
的返回值,该函数不返回任何内容。在
readFromFile
函数中,您的代码可以在打印文件时正确读取文件

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.Read Fixs/COD>的同步对应项,即<代码> fs。那你就可以做了

function readFromFile() {
    return fs.readFileSync('File.txt', 'utf-8');
}
您的代码不再打印未定义的

此外,您的代码有一个输入错误:
const fh=require(“./filehandleing”)必须是
const fh=require('./filehandling')


编辑:

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

同步写入

filehandling.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;
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`);
console.log(fh.readFromFile());
const fh = require('./filehandling');

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

filehandling.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;
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`);
console.log(fh.readFromFile());
const fh = require('./filehandling');

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

是不是错误
未定义
?你的问题不太清楚这是否回答了你的问题@PaulFitzgerald输出的第二行显示未定义,这是我感到困惑的地方。我已经尝试了fs.readfileSync函数,但它完全停止了打印。是的,抱歉,代码没有按原样工作。我编辑了我的答案