0

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

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());
4

1 回答 1

0

我认为造成误解的原因是您给出的示例有点错误。实际代码应该在转换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 文档中查看更多信息。

于 2020-07-17T22:21:01.477 回答