当标头为true时,fast-csv返回未定义的数据

时间:2018-06-19 18:59:24

标签: node.js csv express mongoose

我在使用快速cv时遇到了一个小问题。问题在于,当我将标头设置为true时,会得到“未定义”数据(只有空数据会被推送到数据库)。

const db = require("../models");
const fs = require("fs");
const csv = require("fast-csv");
const csvfile = "./public/csv/vendor_example.csv";
const stream = fs.createReadStream(csvfile);

router.get("/import_data", (req, res, next) => {
  // csv.fromStream(stream, { headers: true });
  var csvStream = csv(stream, { headers: true })
    .on("data", function(data) {
      // products.push(data);
      var imported_data = new db.Products({
        // date: new Date(),
        column1: data[0]
      });

      imported_data.save(error => {
        console.log(skus_data);
        if (error) {
          throw error;
        }
      });
    })
    .on("end", function() {
      console.log("ended");
    });

  stream.pipe(csvStream);

  // res.json({ success: "Data Imported", status: 200 });
  res.json({
    success: "Data imported with no errors",
    status: 200
  });
});

但是,当我删除“ stream,{headers:true}”时,它确实起作用,但是标题被推送到数据库中。

有什么办法解决此问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

想通了。

  var imported_data = new db.Products({
    // date: new Date(),
    column1: data[0]
  });

我需要指定标题的名称而不是data [0],例如:

第1列:data.names