为什么会出现此错误:错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头

时间:2020-08-04 09:18:06

标签: javascript mongodb typescript express mongoose

我已经将添加过程外包给了各种功能。为什么这样做时会出现此错误:

该错误该怎么办,它告诉我什么? 如果由于调用函数而发生错误,我的目的实际上只是为了使代码更清晰。 您是否知道另一种有效过滤的方法,而不是我怎么做?

任务是一个由标题组成的数组,这是一个字符串

我的错误:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:533:11)
    at ServerResponse.header (C:\Users\Albert\Desktop\poc-market-research-app\node_modules\express\lib\response.js:771:10)
    at ServerResponse.send (C:\Users\Albert\Desktop\poc-market-research-app\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (C:\Users\Albert\Desktop\poc-market-research-app\node_modules\express\lib\response.js:267:15)
    at C:\Users\Albert\Desktop\poc-market-research-app\src\controllers\companyController.ts:54:25
    at C:\Users\Albert\Desktop\poc-market-research-app\node_modules\mongoose\lib\model.js:4824:16
    at C:\Users\Albert\Desktop\poc-market-research-app\node_modules\mongoose\lib\model.js:4824:16
    at C:\Users\Albert\Desktop\poc-market-research-app\node_modules\mongoose\lib\helpers\promiseOrCallback.js:24:16
    at C:\Users\Albert\Desktop\poc-market-research-app\node_modules\mongoose\lib\model.js:4847:21
    at C:\Users\Albert\Desktop\poc-market-research-app\node_modules\mongoose\lib\query.js:4390:11
    at C:\Users\Albert\Desktop\poc-market-research-app\node_modules\kareem\index.js:135:16
    at processTicksAndRejections (internal/process/task_queues.js:79:11)

我的代码:

const tasksDuplicates = (data: any): boolean => {
  if (
    data
      .map((value: any) => {
        return value.title;
      })
      .some((val: any, idx: any, array: any) => {
        return array.indexOf(val) !== array.lastIndexOf(val);
      })
  ) {
    return true;
  } else {
    return false;
  }
};

const companyNameProof = (data: any, res: Response): void => {
  CompanyName.findOne({ name: data.basicData.name }, (err, document) => {
    if (err) {
      logger.error(`Error ${err}`);
      res.status(400).json("Error" + err);
    } else {
      if (document) {
        let item = new Company(data);
        item
          .save()
          .then(() => {
            logger.info(`Data added`);
            res.status(200).json("Data added");
          })
          .catch((err: any) => {
            logger.error(`Error ${err}`);
            res.status(400).json("Error" + err);
          });
      } else {
        res.status(400).json("not a valid name");
      }
    }
  });
};

const TasksProof = (data: any, res: Response): void => {
  for (let i = 0; i < data.basicData.tasks.length; i++) {
    Tasks.findOne({ title: data.basicData.tasks[i].title }, (err, doc) => {
      if (err) {
        logger.error(`Error ${err}`);
        res.status(400).json("Error" + err);
      } else {
        if (doc) {
          companyNameProof(data, res);
        } else {
          res.status(400).json("not a valid task");
        }
      }
    });
  }
};

export const addCompanyData = (req: Request, res: Response) => {
  if (tasksDuplicates(req.body.basicData.tasks)) {
    res.json("write no duplicates of tasks");
  } else {
    TasksProof(req.body, res);
  }
};

0 个答案:

没有答案
相关问题