MongoDB ile koleksiyondan veriler alınmıyor

filozofunpiri

Decapat
Katılım
13 Temmuz 2022
Mesajlar
117
Kod:
//app.js

const express = require("express");
const app = express();
const PORT = 3000;
const MongoClient = require('mongodb').MongoClient;

const url = "mongodb+srv://**r*t:***@cluster0.e6a3vn3.mongodb.net/***?retryWrites=true&w=majority";
var conn = MongoClient.connect(url); // returns a Promise

app.get('/', function(req, res) {
 MongoClient.connect(url, function(err, db) {
 if (err) throw err;
 var dbo = db.db("***");
 dbo.collection("blogs").findOne({}, function(err, result) {
 if (err) throw err;
 res.json(result);
 db.close();
 });
 });
})

app.listen(PORT, () => {
 console.log("Başarılı");
});

Veritabanındaki URL'im doğru ona rağmen JSON formatında geri bildirim alamıyorum, bir Hata'da dönmüyor.
Port başarılı olarak görünüyor. Sorun nerede?
Soru detayı = Unable to retrieve collection data from mongodb
 
MongoClient.connect bir Promise döndürdüğü için, bu promise'i await kullanarak bekletmelisiniz. Ayrıca, useUnifiedTopology: true seçeneğini eklemeniz daha iyi olur.

JavaScript:
const express = require("express");
const app = express();
const PORT = 3000;
const MongoClient = require('mongodb').MongoClient;

const url = "mongodb+srv://**r*t:***@cluster0.e6a3vn3.mongodb.net/***?retryWrites=true&w=majority";

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.get('/', async function(req, res) {
  try {
    const client = await MongoClient.connect(url, { useUnifiedTopology: true });
    const db = client.db("***");
    const result = await db.collection("blogs").findOne({});
    res.json(result);
    client.close();
  } catch (err) {
    console.error("MongoDB Bağlantı veya Veri Çekme Hatası:", err);
    res.status(500).json({ error: "Internal Server Error" });
  }
});

app.listen(PORT, () => {
  console.log(`Başarılı, Port: ${PORT}`);
});
 
Kod:
const express = require("express");
const app = express();
const PORT = 3000;
var MongoClient = require('mongodb').MongoClient


app.get("/", async function (req, res) {
  
    var url = "mongodb+srv://*:**@cluster0.e6a3vn3.mongodb.net/**?retryWrites=true&w=majority";
 
    var client = new MongoClient(url);
    var db = client.db("***");
    var vehicle = db.collection("blogs");
    var result = await vehicle.find({}).toArray();
    res.send(result); 
  });
 

app.listen(PORT, () => {
    console.log("Connected 3000");
  });


Hocam merhaba kodu böyle yaptığımda çalışıyoru await kullanmadığımda çalışmıyor.Await kullanmak istemesem nasıl yapmalıyım?
 
JavaScript:
const express = require("express");
const app = express();
const PORT = 3000;
const MongoClient = require('mongodb').MongoClient;

const url = "mongodb+srv://**r*t:***@cluster0.e6a3vn3.mongodb.net/***?retryWrites=true&w=majority";

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

app.get('/', function(req, res) {
  MongoClient.connect(url, { useUnifiedTopology: true }, function(err, client) {
    if (err) {
      console.error("MongoDB Bağlantı Hatası:", err);
      res.status(500).json({ error: "Internal Server Error" });
      return;
    }

    const db = client.db("***");
    db.collection("blogs").findOne({}, function(err, result) {
      if (err) {
        console.error("Veri Çekme Hatası:", err);
        res.status(500).json({ error: "Internal Server Error" });
        return;
      }

      res.json(result);
      client.close();
    });
  });
});

app.listen(PORT, () => {
  console.log(`Başarılı, Port: ${PORT}`);
});

await ifadesini kullanmanızın sebebi, vehicle.find({}).toArray() fonksiyonunun async bir fonksiyon olmasıdır. Eğer await kullanmak istemiyorsan bu asenkron operasyonu beklemek yerine callback fonksiyonlarını kullanabilirsin, kodunu ben senin için editledim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…