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
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" });
}
});
Kamu tau jawabannya?
Ayo bergabung bersama lebih dari 200.000 pengguna lainnya!