Javascript 解析CSV而不下载/保存

Javascript 解析CSV而不下载/保存,javascript,node.js,reactjs,csv,Javascript,Node.js,Reactjs,Csv,我正在创建一个允许用户上传CSV的应用程序。CSV只是一个逗号分隔的文件 在前端,我通过PUT请求将文件发送到后端: Reactjs|fileupload_frontend.js sendFile = () => { const data = new FormData(); data.append('file', this.myCSV_file); axios.post('/parse-csv', data) .then(response => console.lo

我正在创建一个允许用户上传CSV的应用程序。CSV只是一个逗号分隔的文件

在前端,我通过PUT请求将文件发送到后端:

Reactjs|fileupload_frontend.js

sendFile = () => {
  const data = new FormData();
  data.append('file', this.myCSV_file);

  axios.post('/parse-csv', data)
  .then(response => console.log('File sent to server for parsing')
  .catch(error => console.log(error);
}
上面的代码成功地将上传的CSV(信息)发送到我的服务器,该服务器正在
/parse CSV
端点进行侦听

我正在使用
csv解析器
npm包来帮助解决这个问题

Nodejs| fileupload_backend.js

const csv = require('csv-parser');
const fs  = require('fs');
const results = [];

app.post('/parse-csv', (request, response) => {

  fs.createReadStream(request.files.file.data) { // this is a buffer on the req obj
    .pipe(csv())
    .on('data', results.push())
    .on('end', (results) => {
      console.log(results);
    }
  }

}
作为参考,从前端到后端的请求对象如下所示:

Request from upload { name: 'data.csv',
data: <Buffer 22 89 56 24 5y 86 k9 22 . ... >,
encoding: '7bit',
truncated: false,
mimetype: 'text/csv',
md5: [Function: md5],
mv: [Function: mv] }
来自上传{name:'data.csv'的请求,
数据:,
编码:“7bit”,
错:,
mimetype:'text/csv',
md5:[函数:md5],
mv:[功能:mv]}
在每个请求上都会显示一条消息,该消息似乎与我的标题行(csv文件中的第一行)相关,并显示以下消息:

错误:eNote:没有这样的文件或目录,请打开“my,header,row,is,referenced,here”

…然后数据如下所示


我是否必须将CSV文件保存在某个目录中,然后首先解析它?我正在寻找一种将CSV解析为json的方法,这样我就可以将每一行作为条目插入到我的数据库中。

看看下面的包。它将允许您互换地解析csv和大多数电子表格文件格式

您可以通过以下方式使用它:

const XLSX = require('xlsx')
const workbook = XLSX.readFile(source_file_path)
const sheetName = workbook.SheetNames[0]
const sheet = workbook.Sheets[sheetName]
const obj = XLSX.utils.sheet_to_json(sheet)
这适用于库支持的任何电子表格格式


这意味着文件必须保存在中的目录结构中的某个位置,才能使
XLSX.readFile
正常工作。

查看以下软件包。它将允许您互换地解析csv和大多数电子表格文件格式

您可以通过以下方式使用它:

const XLSX = require('xlsx')
const workbook = XLSX.readFile(source_file_path)
const sheetName = workbook.SheetNames[0]
const sheet = workbook.Sheets[sheetName]
const obj = XLSX.utils.sheet_to_json(sheet)
这适用于库支持的任何电子表格格式

这意味着文件必须保存在目录结构中的某个位置,才能使
XLSX.readFile
正常工作。

接受路径作为其参数,该路径可以是字符串、缓冲区或URL

由于您传递了一个
缓冲区
,因此它会尝试将
缓冲区
作为一个路径打开,以便出错

错误:eNote:没有这样的文件或目录,请打开“my,header,row,is,referenced,here”

您需要先从缓冲区创建流,然后再将其输送到CSV解析器。 有很多方法可以做到这一点;实现使用缓冲区的可读流就是其中之一。e、 g

现在实现请求处理程序以使用该类

app.post('/parse-csv', (request, response) => {
    const results = [];
    const bufStream = new BufferStream(request.files.file.data);

    bufStream.pipe(csv())
    .on('data', (data) => results.push(data))
    .on('end', (results) => {
      console.log(JSON.stringify(results));
      response.sendStatus(200);
    }
  }

}
接受路径作为其参数,该参数可以是字符串、缓冲区或URL

由于您传递了一个
缓冲区
,因此它会尝试将
缓冲区
作为一个路径打开,以便出错

错误:eNote:没有这样的文件或目录,请打开“my,header,row,is,referenced,here”

您需要先从缓冲区创建流,然后再将其输送到CSV解析器。 有很多方法可以做到这一点;实现使用缓冲区的可读流就是其中之一。e、 g

现在实现请求处理程序以使用该类

app.post('/parse-csv', (request, response) => {
    const results = [];
    const bufStream = new BufferStream(request.files.file.data);

    bufStream.pipe(csv())
    .on('data', (data) => results.push(data))
    .on('end', (results) => {
      console.log(JSON.stringify(results));
      response.sendStatus(200);
    }
  }

}

csv的预期大小是多少?在内存中完成这一切可能更容易——没有流。查看parse csv的源代码-它似乎过于复杂complicated@niry该文件为0。62kb@bruh为什么不在前端解析它?@AbhishekMani我会使用相同的
csv解析器
包来解析它,除了在我的react代码中而不是节点中?是否有一些本机Javascript函数来解析CSV?原谅我,如果我错过了显而易见的,我已经为此奋斗了10个小时了,刚刚用完的蒸汽有一个模块,您可以通过它轻松解析前端的CSV内容,请让我知道如果您被困在使用该库,CSV的预期大小是多少?在内存中完成这一切可能更容易——没有流。查看parse csv的源代码-它似乎过于复杂complicated@niry该文件为0。62kb@bruh为什么不在前端解析它?@AbhishekMani我会使用相同的
csv解析器
包来解析它,除了在我的react代码中而不是节点中?是否有一些本机Javascript函数来解析CSV?原谅我,如果我错过了显而易见的,我已经为此奋斗了10个小时了,刚用完蒸汽有一个模块,您可以通过它在前端轻松解析您的CSV内容,请告诉我您是否一直在使用该库