fast-csv抛出异常:预期列标题不匹配

时间:2014-11-17 14:37:24

标签: javascript node.js csv

我正在尝试使用fast-csv验证数据。 我的代码看起来像

var fileName = req.files.uploadcsv.path;
var fs = require("fs");

var stream = fs.createReadStream(fileName);

var csv = require("fast-csv");

csv
    .fromStream(stream, {
        headers: true
    })
    .validate(function(data) {
            if (data.age > 18)
                return false;
            else
                return true;

        }

    }

它适用于我上传的每个文件,但如果我上传了带有额外数据的文件,它说 错误:意外错误:预期列标题不匹配:获得5列:6 实际上该文件有5个标题,但它包含的数据集有6个记录。 我想捕获此错误,以便我可以将用户指向错误。

请建议。

4 个答案:

答案 0 :(得分:2)

我已经解决了。解决上述问题的方法是:

.on("error", function(data){
   return false;                         
 })

我已经在.validate()之后实现了这段代码,并且它有效。

答案 1 :(得分:0)

以防将来可能对某人有所帮助: 我遇到了同样的错误,并注意到我的其中一行包含--导致快速csv抛出错误,因为它认为添加了新列。通过将引号中的“单元格”转义来解决。

答案 2 :(得分:0)

已解决: 这是因为快速的csv抛出错误,因为它认为添加了新列。因此请使用 discardUnmappedColumns 选项丢弃多余的列

 csv.fromStream(stream, {
    headers: true,
    discardUnmappedColumns: true
}).validate(function(data) {
        if (data.age > 18)
            return false;
        else
            return true;
    }
}

答案 3 :(得分:-1)

您也可以这样做:

csv
.fromStream(stream, {
    headers: true,
    strictColumnHandling: true
})
.validate(function(data) {
    if (data.age > 18)
        return false;
    else
        return true;
}
.on("data-invalid", function(data){
    // do something like log for example
});