我是Node.js的新手,在尝试一些基本代码时,我遇到了需要帮助的问题。 我有一个模块example2.js,它读取文件的内容,我想导出一个变量,它将包含行文件的所有内容,我试图从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中具有正确的值?
答案 0 :(得分:1)
您可以使用fs.readFileSync()
加载文件一次:
var fs = require('fs')
exports.buffer = fs.readFileSync('S1.dat', { encoding: 'utf8' });
答案 1 :(得分:1)
由于Buffer
在更新时没有自己的事件通知,您希望将回调传递给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);
});
答案 2 :(得分:0)
我不确定你要做什么。但这是我之前评论过的一个例子。
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只是读取您指定的文件并流式传输到您提供的回调。你可以在回电中做任何你想做的事情。如果文件很大,可以多次调用onData
。因此,我们只会在onEnd
中获得完整的信息流。