如何导出在Node.js的callback函数中更新的variables

我是Node.js的新手,在尝试一些基本的代码的时候,我遇到了一个需要帮助的问题。 我有一个模块example2.js读取文件的内容,我想导出一个variables,将具有行文件的所有内容,我试图从testExport.js访问

这里是文件内容。

example2.js

var fs = require('fs') var stream = fs.createReadStream('S1.dat', {flags: 'r', encoding: 'utf-8'}); var buf = ""; module.exports.buffer = buf ; exports.readFile = function f() { stream.on('data', function(d) { module.exports.buffer+=d.toString(); console.log( "Inside function " + module.exports.buffer ); }); }; 

testExport.js

 var e2 = require ('./example2.js'); e2.readFile(); console.log ("From external file" + e2.buffer); 

我应该如何导出它,以便缓冲区在testExport.js中有正确的值?

你可以使用fs.readFileSync()来加载文件一次:

 var fs = require('fs') exports.buffer = fs.readFileSync('S1.dat', { encoding: 'utf8' }); 

由于Buffer没有自己的事件通知它何时被更新,所以你想要传递一个callback给readFile 。 这是一个选项。

example2.js

 var fs = require('fs') var stream = fs.createReadStream('S1.dat', {flags: 'r', encoding: 'utf-8'}); var buf = ""; module.exports.buffer = buf ; exports.readFile = function f(callback) { stream.on('data', function(d) { module.exports.buffer+=d.toString(); console.log( "Inside function " + module.exports.buffer ); callback(module.exports.buffer); }); }; 

testExport.js

 var e2 = require ('./example2.js'); e2.readFile(function(buffer) { console.log ("From external file" + e2.buffer); }); 

林不知道你在做什么。 但是,这是我之前评论过的一个例子。

readFile.js

 var fs = require('fs'); exports.read = function f(file, onData, onEnd) { var stream = fs.createReadStream(file, {flags: 'r', encoding: 'utf8'}); stream.on('data', onData); stream.on('end', onEnd); }; 

testExport.js

 var readFile = require('./readFile'); var buffer = ''; var chunkCount = 0; readFile.read('data.json', function(chunk) { chunkCount++; buffer += chunk; }, function() { console.log(buffer); console.log('Reading Completed. Chunk Count:' +chunkCount); }); 

正如你所看到的,readFile只是读取一个你指定的文件并且stream到你提供的callback中。 你可以在回拨中做任何你想做的事情。 如果文件很大,可以多次调用onData 。 因此,我们只会在onEnd获得完整的stream。