我一直试图让papaparse
在nodejs
上运行很长一段时间了,我一直失败。我想尝试加载我的本地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
4条答案
按热度按时间41ik7eoe1#
从Papaparse README中,它以这种方式支持Node:
Papa Parse在Node.js环境中使用时可以解析Readable Stream而不是File(除了普通字符串)。在此模式下,
encoding
必须是Node支持的字符编码(如果指定)。Papa.LocalChunkSize
、Papa.RemoteChunkSize
、download
、withCredentials
和worker
配置选项不可用。Papa Parse还可以解析节点流风格,这使得
.pipe
可用。只需将ReadableStream通过管道传输到从Papa.parse(Papa.NODE_STREAM_INPUT, options)
返回的流。Papa.LocalChunkSize
、Papa.RemoteChunkSize
、download
、withCredentials
、worker
、step
和complete
配置选项不可用。要在流中注册回调来处理数据,请使用'data'
事件,如下所示:stream.on('data', callback)
并发出流结束的信号,使用'end'
事件如下:stream.on('end', callback)
.pexxcrt22#
正如Erick在评论中所说,Node不支持下载选项。但是,它确实告诉我们Node接口接受
ReadableStream
而不是File
。这对我很有效:
euoag5mw3#
你的代码很好,问题出在文件路径上。
fs.createReadStream
需要一个绝对路径,或者一个相对于项目根的路径。假设这是项目结构:
然后,您可以使用相对于根的路径:
'./files/test.csv'
,或者如果你真的想使用一个相对于文件的路径,那么你可以使用path.resolve(__dirname, '..', 'files', 'test.csv')
。path.resolve参见NodeJS文档,它将使用路径段为您解析绝对路径。
prdp8dxp4#
在使用papa-parse时遇到了这个问题,文档不是很清楚。来源:Toshino's answer