NodeJS 在将头发送到res上的客户端后,无法设置头,send()

eqoofvh9  于 2023-04-29  发布在  Node.js
关注(0)|答案(2)|浏览(100)

我尝试通过Multer实现文件上传。然而,我在试图捕获错误并发送到前端时得到了一个错误。我已经试过浏览文档和在Stackoverflow上已经提出的各种问题,但我对英语的理解似乎很低。Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client是我的错误。我找不到头发送的位置,或者进程结束的位置。希望有更好的理解帮助我。这是我的代码。它发生在db.query()之后

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "./routes/files");
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + "-" + file.originalname);
  },
});

const upload = multer({ storage }).fields([
  { name: "file", maxCount: 1 },
  { name: "school_id", maxCount: 1 },
]);

router.post("/upload/students", (req, res) => {
  try {
    upload(req, res, (err) => {
      if (err) {
        console.log(err);
        res.json({ msg: err.message });
      } else {
        const filePath = req.files["file"][0].path; //req.file.path;
        const workbook = xlsx.readFile(filePath);
        const worksheet = workbook.Sheets[workbook.SheetNames[0]];

        const rows = xlsx.utils.sheet_to_json(worksheet);

        const school_id = req.body.school_id;
        console.log("SchoolId ", school_id);

        rows.forEach((row) => {
          const student_id = row.student_id;
          const klass_id = row.klass;
          const stream_id = row.stream;
          const name = row.name;
          const year = row.year;

          db.query(
            "INSERT INTO student(graduated, prefect, school_id,\
               name, student_id, klass_id, stream_id, year)\
            VALUES($1, $2, $3, $4, $5, $6, $7, $8 )",
            [0, 0, school_id, name, student_id, klass_id, stream_id, year],
            (err) => {
              if (err) {
                console.log(err);
                // res.json({ msg: err.message });
              } else {
                console.log("Successfull");
                // res.json({ success: "Students Uploaded Successfully" });
              }
            }
          );
        });
      }
    });
  } catch (err) {
    res.json({ msg: err.message });
  }
});

module.exports = router;
s71maibg

s71maibg1#

你应该把你的async代码 Package 在一个promise里面,然后在promise之后你就可以resort了。发送您的成功。

toe95027

toe950272#

发布了一个已被删除的答案。加上退货就解决了

if (err) {
    console.log(err);
    res.json({ msg: err.message });
    **return**

相关问题