【问题标题】:How can I use papaparse on Node JS?如何在 Node JS 上使用 papaparse?
【发布时间】:2020-12-19 12:21:04
【问题描述】:

我一直试图让papaparsenodejs 上运行很长时间,但我一直失败。我想尝试加载我的本地 CSV,然后给这个 papaparse?怎么做?我的代码不起作用。

import papa from "papaparse";
import fs from "fs";

export const convertCSV = async (res: Response) => {
  const file = await fs.createReadStream("../files/test.csv");
  papa.parse(file, {
    header: true,
    complete: function (results, file) {
      console.log("Complete", results.data.length, "records.");
    },
  });
};

results.data.length 始终是0

我的 CSV 文件位于 files 文件夹中,该文件夹位于 src 文件夹中:

src/files/test.csv

【问题讨论】:

  • 如何将其读取为字符串?

标签: javascript node.js typescript csv papaparse


【解决方案1】:

Papaparse README,它支持Node是这样的:

当在 Node.js 环境中使用时(除了纯字符串),Papa Parse 可以解析 Readable Stream 而不是 File。在这种模式下,encoding 必须(如果指定)是节点支持的字符编码。 Papa.LocalChunkSizePapa.RemoteChunkSizedownloadwithCredentialsworker 配置选项不可用。

Papa Parse 还可以解析节点流样式,这使得.pipe 可用。只需将Readable Stream 通过管道传输到从Papa.parse(Papa.NODE_STREAM_INPUT, options) 返回的流。 Papa.LocalChunkSizePapa.RemoteChunkSizedownloadwithCredentialsworkerstepcomplete 配置选项不可用。要向流注册回调以处理数据,请使用 'data' 事件,如下所示:stream.on('data', callback) 并指示流结束,使用 'end' 事件,如下所示:stream.on('end', callback)

【讨论】:

    【解决方案2】:

    您的代码很好,问题出在文件路径上。 fs.createReadStream 需要一个绝对路径,或者一个相对于项目根目录的路径。

    假设这是项目结构:

    files/
      - test.csv
    src/
      - convert-csv.ts
    package.json
    tsconfig.json
    

    然后您可以使用相对于根的路径:'./files/test.csv', 或者如果你真的想使用相对于文件的路径,那么你可以使用path.resolve(__dirname, '..', 'files', 'test.csv')

    NodeJS docs for path.resolve,它将使用路径段为您解析绝对路径。

    【讨论】:

      【解决方案3】:

      正如 Erick 在他们的评论中所说,the download option is not supported by Node。但是,它确实告诉我们 Node 接口接受 ReadableStream 而不是 File

      这对我有用:

      Papa.parse(fs.createReadStream("sample/result.csv"), {
          complete: function(results) {
              console.log(results["data"]);
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2019-12-24
        • 1970-01-01
        • 2015-10-01
        • 2019-10-20
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多