MongoDB ile koleksiyondan veriler alınmıyor

filozofunpiri

Centipat
Katılım
13 Temmuz 2022
Mesajlar
100
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.
 

Yeni konular

Geri
Yukarı