Fast-CSV 引发异常:预计列标题不匹配

fast-csv is throwing exception : column header mismatch expected

本文关键字:标题 不匹配 异常 Fast-CSV      更新时间:2023-09-26

我正在尝试使用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 条记录。我想捕获此错误,以便我可以将用户指向错误。

请指教。

已求解:这是因为快速 csv 在认为添加了新列时抛出错误。所以使用丢弃未映射的列选项,丢弃多余的列

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

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

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

我已经在 .validate() 之后实现了这段代码并且它起作用了。

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

你也可以这样做:

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
});