如何从NODE/Express中用户上传的CSV文件中解析数据? [英] How can I parse data from a csv file uploaded by a user in node/express?

查看:5
本文介绍了如何从NODE/Express中用户上传的CSV文件中解析数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个前端反应应用程序和一个后端节点/快速应用程序。我希望允许用户上传CSV文件,然后解析该文件并为每行实例化一个模型。然而,我对如何做到这一点有些困惑,因为我习惯于简单地在API中发布到一条路由,并从请求体持久化。在本例中,请求体中的内容是文件,我不想保存文件,只想保存其中的数据。如何在不将文件保存到数据库的情况下对其进行解析?我尝试使用Multer来处理上传,并使用CSV-Parse来解析内容,但我不确定这是否有意义。尽管如此,以下是代码(app/index):

               ...
const multer  = require('multer');
const upload = multer().single();
const parse = require('csv-parse'); 
               ...

router.post('/distributor/:id/files', (req,res) => { 
  upload(req, res, function (err) {
    if (err) {
      console.error("An error occurred when uploading. Please try again. Note 
      that you may only upload one file at a time, and we only support .csv 
      files.")
      return
    }
    console.log("We have received your file")
  })
});  
                         ... 

// router.get('/distributor/:id/files/:id', (req, res) => { 
//   File
//     .forge({id: req.params.id})
//     .fetch()
//     .then((file) => {
//       if (_.isEmpty(file))
//         return res.sendStatus(404);
//       return parseJson(file)
//     })
//     .then((jsonData) => { 
//       for (var i in jsonData) { 
//         //save instance of model
//       }
//     })
//     .catch((error) => {
//       console.error(error);
//       return res.sendStatus(500);
//     });
// }) 

// function parseJson(file) { 
//     var output = [];
//       // Create the parser
//     var parser = parse({delimiter: ':'});
//     // Use the writable stream api
//     parser.on('readable', function(){
//       while(record = parser.read()){
//         output.push(record);
//       }
//     });
//     // Catch any error
//     parser.on('error', function(err){
//       console.log(err.message);
//     });
//     parser.end(); 
// } 

我知道这没有意义,因为我实际上并不想将文件保存为数据库中的模型和表,我只想保存文件中的每一项,所以我知道我不能创建名为‘/Distributor/:ID/Files/:ID’的路径。但我不知道该怎么做。我希望我想要做的是清楚的!我对节点和一般编程都是相当陌生的,我从来没有遇到过需要处理文件上传的情况。

csv

您可以使用此节点模块来解析推荐答案文件。https://www.npmjs.com/package/csvtojson

例如,您在请求对象中有文件名users

const csv=require('csvtojson');

csv()
.fromString(req.files.users.data.toString('utf8'))
.on('json', (user) => {
    console.log(user);
})
.on('done', () => {
    console.log('done parsing');
});

您将能够以json对象的形式获取每一行。

这篇关于如何从NODE/Express中用户上传的CSV文件中解析数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆