node.js - Node 的 fast-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.
我还更正了代码,使其具有transform
基于csv.transform
.
在他们的 API 文档中查看更多信息。
推荐阅读
- containers - 使用buildah创建OCI镜像,如何创建一个可以直接传递给crun的OCI“Bundle”镜像
- php - Roadrunner RPC 调用日志
- react-admin - 如何使用简单列表启用批量操作
- javascript - 使用 ts-loader 运行 emitDeclarationOnly
- reactjs - 在 React 中使用样式化组件和网格操作排版组件?
- python - opencv红绿灯检测
- ssl - 使用 SslHandler 在通道上关闭通道有时会触发 IllegalReferenceCountException
- vim - 排除特定文件类型被添加到 vim 中的跳转列表
- reactjs - 始终在 plesk 中为 react 应用程序提供 index.html 文件
- javascript - 在 React 中使用这种模式有什么问题吗?