节点的快速csv中的解析和格式化方法有什么区别



我的理解是,它们都创建了可写流,但我不确定如果你像下面的例子那样在之后对数据进行格式化,解析数据的意义是什么。

fs.createReadStream(path.resolve(__dirname, 'assets', 'snake_case_users.csv'))
.pipe(csv.parse({ headers: true }))
.pipe(csv.format({ headers: true }))
.transform((row, next) => {
User.findById(row.id, (err, user) => {
if (err) {
return next(err);
}
return next(null, {
id: row.id,
firstName: row.first_name,
lastName: row.last_name,
address: row.address,
// properties from user
isVerified: user.isVerified,
hasLoggedIn: user.hasLoggedIn,
age: user.age,
});
});
})
.pipe(process.stdout)
.on('end', () => process.exit());

我认为产生误解的原因是您给出的示例有点错误。实际的代码应该在转换之后通过管道传输format流。

代码应该看起来有点像这样:

fs.createReadStream(path.resolve(__dirname, 'assets', 'snake_case_users.csv'))
.pipe(csv.parse({ headers: true }))
.pipe(csv.transform((row, next) => {
User.findById(row.id, (err, user) => {
if (err) {
return next(err);
}
return next(null, {
id: row.id,
firstName: row.first_name,
lastName: row.last_name,
address: row.address,
// properties from user
isVerified: user.isVerified,
hasLoggedIn: user.hasLoggedIn,
age: user.age,
});
});
}))
.pipe(csv.format({ headers: true }))
.pipe(process.stdout)
.on('end', () => process.exit());

这个想法是:

read file -> parse to objects -> transform object -> format to string -> print to stdout.

我还校正了代码,使其具有基于csv.transformtransform

请参阅API文档中的更多内容。

最新更新