Bagaimana Cara Mengatasi Error ERR_HTTP_HEADERS_SENT di Node.js?

Dibuat
·
Dilihat33 kali
0

saya lagi bikin REST API di Node.js dengan framework Express.js, API ini mengembalikan data isi file JSON, tapi kenapa ya API saya ini error ERR_HTTP_HEADERS_SENT?

Ini kode yang saya gunakan:

app.get("/", (req, res) => {
  fs.readFile(pathToPackageJson, "utf-8", (err, data) => {
    if (err) {
      return res.status(500).send({ message: "internal server error" });
    }

    return res.send(JSON.parse(data));
  });

  res.send({ message: "OK" });
});

Pesan errornya:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
1 Jawaban
0

fs.readFile() adalah fungsi asinkron, kode ini res.send({ message: "OK" }); lebih dulu dieksekusi daripada kode callback yang ada di dalam fs.readFile().

res.send({ message: "OK" }); akan menutup soket, ketika fungsi fs.readFile() selesai dan callback dieksekusi kode ini res.send(JSON.parse(data)); tidak akan berfungsi karena soket nya sudah ditutup oleh karena itu mengembalikan error tersebut.

Solusinya hapus res.send({ message: "OK" }); kalau saya liat bagian ini tidak diperlukan, dan biar soket tidak ditutup.

Atau bisa juga pakai fs/promises seperti ini:

const fs = require("fs/promises");

app.get("/", async (req, res) => {
  try {
    const data = await fs.readFile(pathToPackageJson, "utf-8");
    return res.send(JSON.parse(data));
  } catch (error) {
    return res.status(500).send({ message: "internal server error" });
  }
});
Dibuat

Kamu tau jawabannya?

Ayo bergabung bersama lebih dari 200.000 pengguna lainnya!