You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

csv-parse解析CSV无输出无报错,请求技术排查

问题描述

使用csv@6.2.0版本的csv-parse模块编写Node.js代码,预期打印CSV中的记录,但运行后无任何输出也不抛出错误。CSV文件与index.js同目录,内容如下:

userId,prefChannel
1,push.pref
2,email.pref
3,email.pref
4,email.pref
5,push.pref
6,push.pref
7,email.pref
8,push.pref
9,email.pref
10,push.pref

现有index.js代码:

const fs = require("fs");
const { parse } = require('csv-parse');

async function readRecordsFromCSV() {
    const cvsFileName = (__dirname + SETTINGS.filePath);
    console.info(chalk.green(`Streaming file: ${cvsFileName}`));

    // read csv file
    const parser = parse({delimiter: ','}, function(err, data){
        console.log(data);
        console.log(err);
      });
      
      fs.createReadStream(cvsFileName).pipe(parser);
}

// driver code:
// Run the script
; (async function () {
    // read and transform all items from csv file
    const newPrefs_1 = await transformPreferenceRecordsFromCSV();
})()

执行脚本仅输出Streaming file: {correct file path}/.../bq-results-10-records-test.csv,无记录或错误信息输出。


问题排查与修复

1. 函数调用不匹配

定义的读取CSV函数是readRecordsFromCSV,但驱动代码里调用的是transformPreferenceRecordsFromCSV,导致读取CSV的逻辑根本没执行。

2. 未处理流的异步完成

csv-parse的回调模式基于流实现,当前代码的async函数没有返回Promise,脚本可能在流处理完成前就退出,无法触发回调打印数据。

3. 缺失依赖引入

代码中使用了chalk但未引入,虽不会直接导致无输出,但会引发错误,需补充引入。

修复后的完整代码

const fs = require("fs");
const { parse } = require('csv-parse');
const chalk = require('chalk');

// 假设SETTINGS为已定义的配置对象
const SETTINGS = { filePath: '/bq-results-10-records-test.csv' };

async function readRecordsFromCSV() {
    const cvsFileName = (__dirname + SETTINGS.filePath);
    console.info(chalk.green(`Streaming file: ${cvsFileName}`));

    // 用Promise包裹流处理,适配async/await语法
    return new Promise((resolve, reject) => {
        const parser = parse({ delimiter: ',' }, (err, data) => {
            if (err) {
                console.error(err);
                reject(err);
                return;
            }
            console.log(data);
            resolve(data);
        });
        
        fs.createReadStream(cvsFileName)
            .pipe(parser)
            .on('error', (err) => {
                console.error('文件读取出错:', err);
                reject(err);
            });
    });
}

// 驱动代码
(async function () {
    try {
        // 调用正确的读取函数
        const newPrefs_1 = await readRecordsFromCSV();
        // 可在此处继续处理读取到的记录
    } catch (err) {
        console.error('脚本执行出错:', err);
    }
})();

额外说明

  • 若不需要异步等待,也可直接监听parser的end事件,但用Promise包裹更适配async/await写法。
  • 需确保SETTINGS.filePath的路径格式正确,开头的/需根据实际路径拼接情况调整,避免路径错误。

内容的提问来源于stack exchange,提问作者Code freeeeeeeze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:45:49