Node.js 如何解析用户在node/express中上载的csv文件中的数据?
我有一个前端react应用程序和一个后端node/express应用程序。我想允许用户上传一个csv文件,然后解析该文件并为每一行实例化一个模型。然而,我对如何做到这一点有些困惑,因为我习惯于简单地在API中发布到一个路由,并从请求体持久化这个东西。在本例中,请求主体中的内容是文件,我不想保存文件,只想保存其中的数据。如何解析文件而不将其保存到数据库?我曾尝试使用multer处理上传和csv解析来解析内容,但我不确定这是否有意义。尽管如此,以下是代码应用程序/索引:Node.js 如何解析用户在node/express中上载的csv文件中的数据?,node.js,express,multer,node-csv-parse,Node.js,Express,Multer,Node Csv Parse,我有一个前端react应用程序和一个后端node/express应用程序。我想允许用户上传一个csv文件,然后解析该文件并为每一行实例化一个模型。然而,我对如何做到这一点有些困惑,因为我习惯于简单地在API中发布到一个路由,并从请求体持久化这个东西。在本例中,请求主体中的内容是文件,我不想保存文件,只想保存其中的数据。如何解析文件而不将其保存到数据库?我曾尝试使用multer处理上传和csv解析来解析内容,但我不确定这是否有意义。尽管如此,以下是代码应用程序/索引:
...
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”的路由。但我不知道该怎么办。我希望我想做的是清楚的!我对node和编程都是相当陌生的,我从未遇到过需要处理文件上传的情况。您可以使用此节点模块解析csv文件 例如,在请求对象中有文件名用户
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对象获取。谢谢,伙计。这对我真的很有帮助。