Я изучал 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. Но сталкивается с проблемой. Пожалуйста, дайте мне решение!
Ошибка не имеет ничего общего с MongoDB. Вы пытались найти это сообщение об ошибке? Я даже не мог удалить «(MongoDB)» из заголовка, потому что Stack Overflow сопоставил его с существующим вопросом.
есть похожие вопросы, но я не нашел правильного решения
Проблема в том, что вы использовали sendStatus()
вместо того, чтобы использовать status()
. Это точно такая же проблема, как дубликат
... в частности этот ответ
и .sendStatus
, и .json
попытаются ответить клиенту. Таким образом, второй вызов приведет к этой ошибке.
Просто используйте res.json(mybook)
и res.send("there were an error")
достаточно.
Если вы хотите сохранить код состояния, а также отправить данные. Используйте res.status(500).send("there were an error")
.
OP все равно понадобится .status(500)
для ошибки, иначе он будет отправлен как 200
Конечно, спасибо @Phil. Я добавил больше деталей в свой ответ
Отвечает ли это на ваш вопрос? Ошибка: Невозможно установить заголовки после их отправки клиенту