Arama butonu
Bu konudaki kullanıcılar: 1 misafir
3
Cevap
406
Tıklama
0
Öne Çıkarma
Node JS
S
6 yıl
Yüzbaşı

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.



P
6 yıl
Çavuş
Konu Sahibi

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?

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< 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ı >

P
6 yıl
Çavuş
Konu Sahibi

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ı >

P
6 yıl
Çavuş
Konu Sahibi

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ı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.