Şimdi Ara

Node JS

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
346
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba, bu uygulamadaki amacım; form elemanları kullanarak kayıt işlemi yapmak.

    Bir veri tabanı modeli dosyam var db.js diye. Buradan kullanıcıların email lerini çekiyorum.

     
    const email = require('router.js').email;
    let email_OK = true;

    const MongoClient = require('mongodb').MongoClient;

    const uri = "*****";
    const client = new MongoClient(uri, {useNewUrlParser: true});

    client.connect(err=>{
    if(err) throw err;

    const collection = client.db('English').collection('users');

    var find = collection.find({email: email})

    find.forEach(data=>{
    if(data)
    email_OK = false
    })





    client.close(err=>{
    if(err) throw err;

    module.exports = email_OK;
    });

    });


    Ve bu şekilde export ediyorum. Sonra router.js dosyamda bunları işliyorum.

     
    router.post('/register', (req, res, next) => {

    const email = user_ctrl.main_reg(req,res); // html'deki form elemanına girilen email'i return eden fonksiyon.

    if(email){

    module.exports.email = email;
    const interval = setInterval(()=>{ // interval kullanmazsam, aşağıda "let email_OK" yaptığımda hep {} bunu gönderiyor.

    let email_OK = require('db.js');

    if(email_OK){ // email_OK değişkeni boş değilse if bloğuna giriyorum.

    user_ctrl.exist_control(req, res, email_OK); // sonucun gönderildiği başka bir fonksiyon.
    clearInterval(interval);
    }
    },100);


    Bazı durumları yorum satırlarında da belirttim. Şimdi ben html'deki formu post ettiğimde, örneğin email_OK false çıktı ve bu yüzden ekrana "Girdiğiniz email hesabı zaten mevcuttur!" bastırıyor. Eğer true çıksaydı "Başarılı bir şekilde üye oldunuz!" bastırıyor. Buraya kadar her şey doğru işliyor. Ama mesela email_OK false çıktı ve ekrana "Girdiğiniz email hesabı zaten mevcuttur!" yazdırdıktan sonra tekrar üye olma sayfasına geliyorsun normal olarak. Bu sefer form'da email'e ne yazarsan yaz önceki ekrana bastırdığının aynısını yazıyor. Çünkü email_OK değişmiyor. Ancak uygulamayı yeniden başlatırsam sıfırlanıyor. Bu durumu nasıl çözebilirim? email_OK neden değişmiyor? db.js'de bir kere export edilip her require yapıldığında aynı sonucu vermesini nasıl engelleyebilirim?



    < Bu mesaj bu kişi tarafından değiştirildi PsLıcks -- 7 Temmuz 2019; 14:22:11 >
    < Bu ileti mobil sürüm kullanılarak atıldı >







  • valla setinterval'i gördükten sonra okumayı bıraktım. olmaz öyle, Node'da herşey asenkron, javascript event loop nasıl çalışır önce bunu öğren, "azimle yapan betonu deler" gibi kaba kuvvetle her 100ms'de deneyerek olmaz bu iş, daha beter olur, özellikle javascript'te.
  • Saçma olduğunu biliyorum. İşte o işin içinden çıkamadığım için sordum zaten.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Sorun aşağıdaki kod bloğu ile çözülmüştür.

    db.js

    module.exports = (email, callback) => {

    let email_OK = true;

    const MongoClient = require('mongodb').MongoClient;

    const uri = "***";
    const client = new MongoClient(uri, { useNewUrlParser: true });

    client.connect(err => {
    if (err) throw err;

    const collection = client.db('English').collection('users');


    let find = collection.find({email: email})

    find.forEach(data => {
    if(data)
    email_OK = false;
    })



    client.close(err => {
    if (err) throw err;
    callback(email_OK);
    });

    });

    }



    router.js

    router.post('/register', (req, res, next) => {

    const email = user_ctrl.main_reg(req, res);


    if (email) {

    require('../db.js')(email, (email_OK) => {

    console.log(email_OK);


    // devam fonksiyonları
    });
    });

    }

    });



    < Bu mesaj bu kişi tarafından değiştirildi PsLıcks -- 8 Temmuz 2019; 18:52:4 >
    < Bu ileti mobil sürüm kullanılarak atıldı >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.