Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解析multer返回的javascript对象?_Javascript_Node.js_Csv_Express_Multer - Fatal编程技术网

如何解析multer返回的javascript对象?

如何解析multer返回的javascript对象?,javascript,node.js,csv,express,multer,Javascript,Node.js,Csv,Express,Multer,我试图使用multer在express中处理csv文件的上传,然后逐行解析该文件。我可以将该文件作为req.body中包含的对象获取,但我无法解析它,因为它现在似乎只是一个对象,不再是csv字符串。如何从上传的文件中分别获取每一行? (应用/索引): 我尝试在第二个函数中使用csvtojson,如下所示: csv() .fromString(req.body.toString(UTF8)) .subscribe((csvLine)=>{ console.log(csvLine);

我试图使用multer在express中处理csv文件的上传,然后逐行解析该文件。我可以将该文件作为req.body中包含的对象获取,但我无法解析它,因为它现在似乎只是一个对象,不再是csv字符串。如何从上传的文件中分别获取每一行? (应用/索引):

我尝试在第二个函数中使用csvtojson,如下所示:

 csv()
.fromString(req.body.toString(UTF8))
.subscribe((csvLine)=>{
    console.log(csvLine); 
} 
但这只是试图解析整个对象,而不是其中的每一行。以下是multer返回的对象片段:

{"UPC,Price,SKU,Title\r\n043171884536,1.17,538397,ORANGE YARN EGGS SIZE 4 - 
4 PK\r\n043171080044,1.39,942227,MIKE'S YELLOW/CORN GLO 
BAIT\r\n035011000046,1.98,161687,REPLACEMENT BRAKE 
PADS\r\n056389001503,1.79,41582,FIRE 
LIGHTERS\r\n087837005156,5.04,266320,PLATINUM GREEN 1/4LB SPOOL 
25#\r\n046295070045,1.54,604652,MIKE'S GARLIC GLO-SCENT 
OIL\r\n043171660161,1.02,126011,THREAD  RED 100'\r"} 

在我使用bodyParser之前编辑**。我在一篇文章中看到,将bodyParser与multer一起使用将不起作用,所以我将其注释掉。现在,我没有得到实体对象、文件对象或文件对象。我尝试使用upload.none()并在请求中发送相同的文件,以查看是否可以使其出错,并显示消息“LIMIT\u UNEXPECTED\u file”,但没有,因此multer似乎甚至无法识别正在发送的文件。我在Postman中对此进行了测试,内容类型设置为false,正文为二进制,并附加了一个文件。以这种方式测试请求是否有问题?

在multer文档提供的示例中,req.body对象将包含表单中的文本字段,req.file将包含上载的文件:

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
})
您是否尝试过使用
文件
对象?如下所示:

router.post('/distributor/:id/upload', upload.single(), function (req, res, next) {
  req.setTimeout(600000);
  console.log(req.body)
  console.log(req.file)
  csv()
  .fromFile(req.file.path)
  .then((jsonObj)=>{
    console.log(jsonObj);
    //loop through array of objects here
  }) 
  next()
});

{“UPC,价格,SKU,标题\r\n…红色100'\r”}
不是有效的对象。与
{“abc”}
类似,它缺少键后面的值–对象看起来像
{“abc”:“def”}
。你到底是怎么得到multer返回的那个东西的?如果运行该值的
typeof
,JavaScript会说该值是一个对象还是一个字符串?@Rory O'Kane,我同意,这让我大吃一惊,但它是我在console.log(req.body)时得到的。如果我调用typeof,它会说object,但我想不出任何普通的object方法可以检索其中的数据!如果输入console.log req.file,则显示为未定义。我从multer文档中了解到,req.file/files是为非文本文件填充的,但对于纯文本文件,填充的唯一内容是req.bodyReq.body包含文件中的文本,但它的形式在我使用bodyParser之前我无法使用它(据我所知)。我在另一期中看到,将bodyParser与multer一起使用将不起作用,因此我将其注释掉。现在,我没有得到实体对象、文件对象或文件对象。我尝试使用upload.none()并在请求中发送相同的文件,以查看是否可以使其出错,并显示消息“LIMIT\u UNEXPECTED\u file”,但没有,因此multer似乎甚至无法识别正在发送的文件。我使用的是Postman,内容类型设置为false,正文为二进制,附带一个文件。以这种方式测试请求是否有问题?我可能错了,但我的理解是multer用于多部分表单数据。能否尝试将内容类型更新为
多部分/表单数据
?在body选项卡中,应该有一个
表单数据
单选按钮选项,您可以选择。然后,您应该能够在键的下拉列表中选择
文件
选项并上载文件。以下是显示以下内容的屏幕截图链接:。在postman中更新您的请求后,您应该获得file对象。让我知道这是否有帮助。我不再尝试在Postman中测试它,而是开始从我的实际客户那里测试它,现在它开始工作了。我认为你是对的,可能是因为通过邮递员发送的编码有问题。现在我知道了未来。谢谢
router.post('/distributor/:id/upload', upload.single(), function (req, res, next) {
  req.setTimeout(600000);
  console.log(req.body)
  console.log(req.file)
  csv()
  .fromFile(req.file.path)
  .then((jsonObj)=>{
    console.log(jsonObj);
    //loop through array of objects here
  }) 
  next()
});