如何使用快速 CSV 正确处理错误?

问题描述

在下面的代码中,我想检查标头是否有效,然后停止读取流(如果有效)并将错误发送回客户端(通过我的 ErrorHandler 函数)。我在控制台中看到以下内容

UnhandledPromiseRejectionWarning:错误:请检查您的列标题

这是为什么?

uploadExercisesViaFile = async (
    req: Request,res: Response,next: NextFunction
  ) => {
    try {
      let checker = (arr,target) => target.every((v) => arr.includes(v));
      const columns = ["name","link","description"];

      const results = [];
      let errors: string[] = [];
      const parseCSV = parseString(req.file.buffer.toString(),{
        headers: true,maxRows: 5,})
        .on("headers",(header) => {
          if (!checker(header,columns)) {
            errors.push("Please check your column headers.");
            parseCSV.end();
          }
        })
        .on("data",async (row) => {
          console.log(row);
          results.push(row);
        })
        .on("error",(error) => {
          errors.push(error.message);
        })
        .on("end",async (rowCount) => {
          // Check if errors
          if (errors.length > 0) {
            console.log(errors);
            throw new ErrorHandler(400,errors[0]);
          }

          // Upload
          const uploadedExercises = await Exercises.batchUploadExercise(
            results.map((r) => {
              return { ...r,access: req.body.access,coach: req.user.id };
            })
          );
          res.status(200).json({ rowCount: rowCount });
          return;
        });
    } catch (e) {
      next(e);
    }
  };

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)