NodeJS 在引导一个 csv 文件后崩溃

Posted

技术标签:

【中文标题】NodeJS 在引导一个 csv 文件后崩溃【英文标题】:NodeJS crashes after sometime of leading a csv file 【发布时间】:2020-02-29 20:06:47 【问题描述】:

我一直在做一个在读取 csv 时输出 xml 的项目,我使用 fs.createReadStream() 方法读取 csv 文件,但过了一段时间,终端就崩溃了。

我得到了

C:\Users\username\Documents\Programming\Node Projects\DAE Parser\main.js:13
      row["Value"].includes("tri") ||
                   ^

TypeError: Cannot read property 'includes' of undefined

它不会读取整个文件。

这就是我正在做的事情

fs.createReadStream("test.csv")
  .pipe(csv())
  .on("data", row => 
    if (
      row["Value"].includes("tri") ||
      row["Value"].includes("vt") ||
      row["Value"].includes("vx") ||
      row["Value"].includes("vn")
    ) 
      console.log(row)
    
  )

【问题讨论】:

什么row["Value"] 不存在? 据我了解,每一列都有一个 IMO,这有两个原因。 1. row["Value"] 的值不存在。 2. row["Value"] 的值既不是字符串也不是数组。它是别的东西。 【参考方案1】:

你的row["Value"]是未定义的,你可以添加一个条件来检查它是否是假的

fs.createReadStream("test.csv")
  .pipe(csv())
  .on("data", row => 
    if (row["Value"] && (
      row["Value"].includes("tri") ||
      row["Value"].includes("vt") ||
      row["Value"].includes("vx") ||
      row["Value"].includes("vn")
    )) 
      console.log(row)
    
  )

【讨论】:

【参考方案2】:

您的代码在以下情况下容易受到攻击:

    row 不是对象 row["Value"] 不存在或不是数组。

如果您想在任何特定行中完全安全,那么您可以这样做:

fs.createReadStream("test.csv")
  .pipe(csv())
  .on("data", row => 
    if (typeof row === "object") 
      let arr = row.Value;
      if (arr && Array.isArray(arr) && (
        arr.includes("tri") ||
        arr.includes("vt") ||
        arr.includes("vx") ||
        arr.includes("vn")
      )) 
        console.log(row);
      
   
)

【讨论】:

@himanshusardana - 这回答了你的问题吗?如果是这样,您可以通过单击答案左侧的复选标记在此处向社区表明这一点。这也将为您在 *** 上赢得一些声誉点,以遵循正确的程序。如果这没有回答您的问题,请评论您仍然对问题的哪一部分感到困惑。

以上是关于NodeJS 在引导一个 csv 文件后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

再次保存为 CSV 文件时 Excel 崩溃

NodeJs 导出 csv 文件

NodeJS:读取一个大的 csv 文件

NodeJS - 等到流式传输多个文件完成后再继续编写代码

从nodejs中的CSV文件获取数据

在 NodeJS 中将 200'000 行以上的大型 csv 文件插入 MongoDB