Node.js Can';不要让NodeJS向可写流写入任何内容
在命令行上本地运行NodeJS(Node.js Can';不要让NodeJS向可写流写入任何内容,node.js,Node.js,在命令行上本地运行NodeJS(v8.16.2)。我抓取一个电子商务网站,将相关信息收集到一个数据结构中,然后尝试通过创建写入流手动将其写入纯文本CSV文件(我的记录没有固定的字段集)。这最后一步不起作用 // Other stuff const exitHandler = function(options, exitCode) { if (exitCode || exitCode !== 0) console.log(exitCode); // Other stuff
v8.16.2
)。我抓取一个电子商务网站,将相关信息收集到一个数据结构中,然后尝试通过创建写入流手动将其写入纯文本CSV文件(我的记录没有固定的字段集)。这最后一步不起作用
// Other stuff
const exitHandler = function(options, exitCode) {
if (exitCode || exitCode !== 0) console.log(exitCode);
// Other stuff
writeToCsv();
if (options.exit) process.exit();
}
const writeToCsv = function() {
let ws = fs.createWriteStream('./final-data.csv');
const crlf = '\n\r'; // might need to reverse this
// Please ignore the weird layout
for (let seller in finalData.sellers) {
ws.write('Seller:,' + seller + crlf + ',Brands:');
for (let brand of finalData.sellers[seller].brands) {
ws.write(',' + brand);
}
ws.write(crlf + ',Addresses:');
for (let addr of finalData.sellers[seller].addrs) {
ws.write(',"' + addr + '"');
}
ws.write(crlf);
}
ws.on('finish', () => {
console.log('Wrote all data'); // never prints this
});
ws.end();
}
process.on('exit', exitHandler.bind(null,{cleanup:true}));
我怀疑这是因为NodeJS在数据刷新到磁盘之前就退出了,但无法找到一种方法使NodeJS同步刷新数据
PS:NodeJS的新成员请查看下面的示例并将其集成 根据你的评论,我更新了代码
async function writeDataInCSV(filePath, dynamicHeader, data) {
const csvWriter = createCsvWriter({
path: filePath,
header: dynamicHeader
});
await csvWriter
.writeRecords(data)
.then(()=> console.log('The CSV file was written successfully'));
}
writeDataInCSV('out.csv',dynamicHeader, Data)
这里设置标题数组并生成数据并传递给WriteDaintCSV方法尝试
异步函数(选项,exitCode)
和等待writeToCsv()代码>添加ws.on('error',函数(err){console.log(err);});要检查到底是什么错误?@AbhishekSingh没有打印任何内容。@DaniyalLukmanov没有工作…当进程退出时,您正在运行代码(exitHandler)。我不认为它会像这样工作?当计算finalData时,您应该调用writeToCsv函数。我没有固定字段。我有多值字段(每个卖家都有一套品牌和一套地址)。我还没有真正尝试过这段代码,但我看到过类似的东西,也不确定它是如何工作的。因此,请使用类似WriteDaincv(filePath,dynamicHeader,data)``异步函数WriteDaincv(filePath,dynamicHeader,data){const csvWriter=createCsvWriter({path:filePath,header:dynamicHeader});等待csvWriter.writeRecords(数据)。然后(()=>console.log('CSV文件已成功写入');}```