一般而言,createReadStream()用法大多数时候使用如下:
// file.js
const fs = require('fs');
const readStream = fs.createReadStream('largefile.txt', 'utf8');
readStream.on('data', (chunk) => {
console.log('接收到一块数据:', chunk);
});
readStream.on('end', () => {
console.log('文件读取完成.');
});
readStream.on('error', (err) => {
console.error('文件读取失败:', err);
});
但是在实际应用中,后端如此写法,无法正确将文件数据响应到前端。
所以此处可以用Promise进行返回,达到响应前端的目的,代码如下:
const fs = require('fs');
const path = require('path');
async function readStream(filePath) {
// Promise用法
return new Promise((resolve, reject) => {
const readStream = fs.createReadStream(filePath);
let data = '';
readStream
.on('data', (chunk) => {
data += chunk;
})
.on('error', (err) => {
reject(err);
})
.on('end', () => {
resolve(data);
});
});
}
async function readFile() {
cosnt filePath = path.join(__dirname, 'example.txt');
const data = await readFile(filePath);
return data;
}
// 使用示例
readFile(filePath)
这里代码直接返回一个Promise,就可以解决上述问题。