(Узел) Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту

Я изучал NodeJS и mongoDB на YouTube, но, к сожалению, столкнулся с этой проблемой, и вот мой файл кода! заранее спасибо!

db.js

const { MongoClient } = require("mongodb");

let dbConnection;

module.exports = {
  connectToDb: (cb) => {
    MongoClient.connect("mongodb://localhost:27017/bookstore")
      .then((res) => {
        dbConnection = res.db();
        return cb();
      })
      .catch((error) => {
        console.info(error);
        return cb(error);
      });
  },
  getDb: () => dbConnection,
};

index.js

const express = require("express");
const { connectToDb, getDb } = require("./db");

// init app and middleware
const app = express();

//db connection
let db;

connectToDb((xato) => {
  if (!xato) {
    app.listen(3000, () => {
      console.info("The 3000 port is installed");
    });
    db = getDb();
    return db;
  }
});

//routes
app.get("/bookstore", (req, res) => {
  let mybook = [];
  // the collection name from mongoDB
  db.collection("bookstore")
    .find()
    .sort({ author: 1 })
    .forEach((book) => mybook.push(book))
    .then(() => {
      return res.sendStatus(200).json(mybook);
    })
    .catch(() => {
      return res.sendStatus(500).send("there were an error");
    });
  // res.json({ MyWords: "I am coming from json res" });
});

он должен возвращать данные из локальной базы данных mongodb. Но сталкивается с проблемой. Пожалуйста, дайте мне решение!

🤔 А знаете ли вы, что...
JavaScript обеспечивает обработку ошибок с использованием конструкции try...catch.


65
1

Ответ:

Решено

и .sendStatus, и .json попытаются ответить клиенту. Таким образом, второй вызов приведет к этой ошибке.

Просто используйте res.json(mybook) и res.send("there were an error") достаточно.

Если вы хотите сохранить код состояния, а также отправить данные. Используйте res.status(500).send("there were an error").