我正在尝试使用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个记录。 我想捕获此错误,以便我可以将用户指向错误。
请建议。
答案 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
});