(Узел) Ошибка [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. Но сталкивается с проблемой. Пожалуйста, дайте мне решение!

Отвечает ли это на ваш вопрос? Ошибка: Невозможно установить заголовки после их отправки клиенту

Phil 10.02.2023 01:14

Ошибка не имеет ничего общего с MongoDB. Вы пытались найти это сообщение об ошибке? Я даже не мог удалить «(MongoDB)» из заголовка, потому что Stack Overflow сопоставил его с существующим вопросом.

Phil 10.02.2023 01:15

есть похожие вопросы, но я не нашел правильного решения

Sardor Sirojov 10.02.2023 01:19

Проблема в том, что вы использовали sendStatus() вместо того, чтобы использовать status(). Это точно такая же проблема, как дубликат

Phil 10.02.2023 01:23

... в частности этот ответ

Phil 10.02.2023 01:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

OP все равно понадобится .status(500) для ошибки, иначе он будет отправлен как 200

Phil 10.02.2023 01:37

Конечно, спасибо @Phil. Я добавил больше деталей в свой ответ

hungtran273 10.02.2023 01:42

Другие вопросы по теме