Javascript node.js中的Async readFile module.exports
很抱歉,这可能是一个简单的问题,但我正试图弄清楚node是如何工作的,特别是对于这样的问题: 我需要做的是通过require和module.exports从fs.readFile发送一个对象/文件。这就是我试过的,是吗 在一个文件(称为app.js)中,读取文件的代码:Javascript node.js中的Async readFile module.exports,javascript,node.js,Javascript,Node.js,很抱歉,这可能是一个简单的问题,但我正试图弄清楚node是如何工作的,特别是对于这样的问题: 我需要做的是通过require和module.exports从fs.readFile发送一个对象/文件。这就是我试过的,是吗 在一个文件(称为app.js)中,读取文件的代码: var fs = require('fs'); var file_contents = undefined; var callback_reader = function(err, data) { if (err) ret
var fs = require('fs');
var file_contents = undefined;
var callback_reader = function(err, data) {
if (err) return console.error(err);
file_contents = data.toString().split('\n');
}
module.exports = {
parseFile: function(file_path) {
fs.readFile(file_path.toString(), 'utf-8', callback_reader);
}
}
在另一个文件中,(称之为main.js)我需要使用readFile读取的文件内容,如下所示
var file_importer = require('./app.js')
file_importer.parseFile(real_path_to_file);
但如果我尝试最后一行的console.log,我总是得到未定义的对象。现在我知道这是因为回调在console.log之前不会执行,但我不确定如何实现这种通信。这是javascript工作,它不会等待回调被调用返回。 您应该在回调中执行
console.log
。
例如:
fs.readFile(pathToFile, 'utf-8', function(err, data) {
if (err) return err;
console.log(data);
// Continue your process here
})
所以我稍微修改了你的代码,使用回调。 似乎无法在module.exports中使用异步函数的“return”。然而,下面的代码按预期工作。希望能有帮助 main.js
var file_importer = require('./app.js')
file_importer.parseFile('./time.js', function(err, data){
if(err) return console.log(err);
console.log(data);
});
var fs = require('fs');
module.exports = {
parseFile: function(file_path, callback) {
fs.readFile(file_path.toString(), 'utf-8', function(err, data) {
if (err) return callback(err);
callback(null, data);
});
}
}
// much shorter version
exports.parseFile = function(file_path, callback) {
fs.readFile(file_path.toString(), 'utf-8', callback);
}
app.js
var file_importer = require('./app.js')
file_importer.parseFile('./time.js', function(err, data){
if(err) return console.log(err);
console.log(data);
});
var fs = require('fs');
module.exports = {
parseFile: function(file_path, callback) {
fs.readFile(file_path.toString(), 'utf-8', function(err, data) {
if (err) return callback(err);
callback(null, data);
});
}
}
// much shorter version
exports.parseFile = function(file_path, callback) {
fs.readFile(file_path.toString(), 'utf-8', callback);
}
您没有从回调读取器返回文件内容,需要var file=file\u importer.parse。。。。console.log(file)Ok如果我在app.js的callback_reader中使用return file_contents,并在main.js中调用console log,如@molda所述,我在日志中仍然没有定义。它当然可以这样工作,但它在同一个文件中……我需要使用modules.export将读取的文件内容传递给其他函数。如果我使用同步版本的文件阅读器,我可以很容易地做到这一点,但。。。