Express Js Soru

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    2021 Talihlisi
    TheAvenqer
    TheAvenqer's avatar
    Kayıt Tarihi: 09/Şubat/2014
    Erkek

    Şimdi klasik bir sıralı işlem yapan dilden geçen birisiyim async kavramını az çok anladım ama uyarlayamadım.

    Yapmak istediğim şu:

    3 tane sql sorgum var sırasıyla çalıştırmak istiyorum yani misalen başta sayıyı kontrol ediyorum sonra insert edip tekrar sayıyı kontrol edip 10 dan büyükse işlem yapmak istiyorum gibi then kullanmayı denedim ya then olmuyor ya ben beceremedim. await desen ayrı bir saçma durdu.

    Şuanki çıktım bu şekil

    Kod şu şekil:

    function DB_Select(Query){
        connection.query(Query, (err, rows) => {
            if (err) throw err;
            console.log("All Rows Inserted",rows[0].sayi);
            return rows;
        });
    }
    
    function DB_All(Query,data) {
        connection.query(Query, [data], (err, rows) => {
            if (err) throw err;
            console.log("All Rows Inserted");
        });
        return true;
    }
    
    
    app.post("/api/test", (req, res, next) => {
        console.log('Got body:', req.body);
        var scanner_id = req.body.root[0].mac
        console.log(scanner_id)
        var data = [];
        
        for(var gelen_data in req.body.root){
            if(req.body.root[gelen_data].mac != scanner_id){
                data.push([req.body.root[gelen_data].mac,scanner_id])
            }
        }
        console.log(data);
        var query = `INSERT INTO temp 
            (card_no, scanner_no) VALUES ?;`;
        var query_temp_count = `SELECT COUNT(*) AS sayi FROM temp`;
        console.log(DB_Select(query_temp_count));
        console.log(DB_All(query,data));
        console.log(DB_Select(query_temp_count));
    
        res.send({
            message: `Basarili`
        });
    });

     


    Bot ve lisans ihtiyaçlarınız için pm atınız.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    2021 Talihlisi
    TheAvenqer
    TheAvenqer's avatar
    Kayıt Tarihi: 09/Şubat/2014
    Erkek

    Nodejs de mysql işlemi yapan hiç olmadı mı


    Bot ve lisans ihtiyaçlarınız için pm atınız.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    function DB_All(Query,data) {
        connection.query(Query, [data], (err, rows) => {
            if (err) throw err;
            console.log("All Rows Inserted");
        });
        return true;
    }

    js bilgim cok iyi degil yanlissam duzeltir birisi ama :

    burada ustteki query yi bitirmeyi beklemeden alttaki returne gelecegini biliyon di mi ? 

    connection.query().then() gibi bisey yapman lazim


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    2021 Talihlisi
    TheAvenqer
    TheAvenqer's avatar
    Kayıt Tarihi: 09/Şubat/2014
    Erkek
    yolbulucu bunu yazdı
    function DB_All(Query,data) {
        connection.query(Query, [data], (err, rows) => {
            if (err) throw err;
            console.log("All Rows Inserted");
        });
        return true;
    }

    js bilgim cok iyi degil yanlissam duzeltir birisi ama :

    burada ustteki query yi bitirmeyi beklemeden alttaki returne gelecegini biliyon di mi ? 

    connection.query().then() gibi bisey yapman lazim

    Evet hocam biliyorum .then yapınca sanki çok saçma bir hal aldı 3 tane then her şey iç içe girdi o returnler ne yapmak istediğimi göstermek için


    Bot ve lisans ihtiyaçlarınız için pm atınız.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    antichrist
    antichrist's avatar
    Kayıt Tarihi: 15/Ağustos/2021
    Erkek
    function DB_Select(Query){
    	return new Promise((resolve, reject) => {
    	    connection.query(Query, (err, rows) => {
    		if (err) reject(err);
    		console.log("All Rows Inserted",rows[0].sayi);
    		reesolve(rows);
    	    });
    	});
    }
     
    function DB_All(Query,data) {
    	return new Promise((resolve, reject) => {
    	    connection.query(Query, [data], (err, rows) => {
    		if (err) reject(err);
    		console.log("All Rows Inserted");
    		resolve(true);
    	    });
    	});
    }
     
     
    app.post("/api/test", async (req, res, next) => {
        console.log('Got body:', req.body);
        var scanner_id = req.body.root[0].mac
        console.log(scanner_id)
        var data = [];
         
        for(var gelen_data in req.body.root){
            if(req.body.root[gelen_data].mac != scanner_id){
                data.push([req.body.root[gelen_data].mac,scanner_id])
            }
        }
        console.log(data);
        var query = `INSERT INTO temp
            (card_no, scanner_no) VALUES ?;`;
        var query_temp_count = `SELECT COUNT(*) AS sayi FROM temp`;
        console.log(await DB_Select(query_temp_count));
        console.log(await DB_All(query,data));
        console.log(await DB_Select(query_temp_count));
     
        res.send({
            message: `Basarili`
        });
    });

     

    Native nodejs mysql de promise dönüş olmadığı için direk await ya da then kullanamazsınız. Bunun yerine fonksiyonların dönüşlerini promise olarak yapıp kullanılacak fonksiyonda await ile beklemesini sağlayabilirsiniz. Ya da zincirleme yapacaksanız .then ile iç içe kullanabilirsiniz. Ama bu durumda böyle kullanman yeterli olur.

    Yol yakınken native mysql'den vazgeç derim hocam, en azından mysql2 kullan ya da orm olayına geç derim. Sequelize idealdir, bir sefer model yapısını ayarlarsın kafan rahat olur.


    |~_~|
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    end
    end's avatar
    Kayıt Tarihi: 16/Ekim/2016
    Erkek

    @antichrist guzel aciklamis olayi.

    Ya kendin bi promise wrapper yazacaksin ki await/then ile kullanabilesin, ya da knex, mysql2 veya sequelize kullanacaksin.


    0x0480 takilin madem ﷽﷽﷽
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Hocam NodeJS ile karar kıldı isen bence typescript ile başla ve nest.js öğren backend için. Çatır çutur kod yazarsın ve typesafe ilerlersin.


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    2021 Talihlisi
    TheAvenqer
    TheAvenqer's avatar
    Kayıt Tarihi: 09/Şubat/2014
    Erkek
    MhmdAlmz bunu yazdı

    Hocam NodeJS ile karar kıldı isen bence typescript ile başla ve nest.js öğren backend için. Çatır çutur kod yazarsın ve typesafe ilerlersin.

    NodeJs zaten ilgimi çekiyordu biraz mecburiyetten girdim sayılabilir seri api yazmam lazımdı nodejs tercih ettim ama 1 kez girmiş bulundum devam ederim typescript bakacam not aldım 

     

    Mysql2 deniyorum şimdi


    Bot ve lisans ihtiyaçlarınız için pm atınız.
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    2021 Talihlisi
    TheAvenqer
    TheAvenqer's avatar
    Kayıt Tarihi: 09/Şubat/2014
    Erkek
    const Pool = require('pg').Pool
    var format = require('pg-format');
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.use(bodyParser.raw());
    
    const pool = new Pool({
        user : 'postgres',
        host : 'localhost',
        database : 'beacon',
        password : 'root',
        port : 5432
    })
    
    app.post("/api/test", (req, response, next) => {
        var scanner_id = req.body.root[0].mac
        var data = [];
        for(var gelen_data in req.body.root){
            if(req.body.root[gelen_data].mac != scanner_id){
                //data += "('" + req.body.root[gelen_data].mac +"','"+ scanner_id +"'),"
    
                data.push([req.body.root[gelen_data].mac,scanner_id])
            }
        }
        pool.query(format('INSERT INTO temp (card_id,scanner_id) VALUES %L',data)
        ).then(() => {
            pool.query('SELECT COUNT(*) as sayi FROM temp').then(res => {
                if (res.rows[0].sayi > 15){
                    console.log('Temizlenecek')
                }
                response.status(200).json(res.rows)
            }).catch(err =>{
                response.status(400).json({message:"Hata1" + err})
            })
        }).catch(err => {
            response.status(400).json({message:"Hata2" + err})
        });
    
    })

    Postgres'e geçince çatır çatır temiz oldu. Bilgili hocalarımız kontrol edebilirse then catch yapısı tam oturmuş mu diye yoksa tek catch ile işi bitirebilir miydik. Şuan isteğimi karşılıyor sadece daha iyisi nasıl yapılır diye merak ediyorum

    TheAvenqer tarafından 15/Kas/21 00:04 tarihinde düzenlenmiştir

    Bot ve lisans ihtiyaçlarınız için pm atınız.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek
    TheAvenqer bunu yazdı
    const Pool = require('pg').Pool
    var format = require('pg-format');
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.use(bodyParser.raw());
    
    const pool = new Pool({
        user : 'postgres',
        host : 'localhost',
        database : 'beacon',
        password : 'root',
        port : 5432
    })
    
    app.post("/api/test", (req, response, next) => {
        var scanner_id = req.body.root[0].mac
        var data = [];
        for(var gelen_data in req.body.root){
            if(req.body.root[gelen_data].mac != scanner_id){
                //data += "('" + req.body.root[gelen_data].mac +"','"+ scanner_id +"'),"
    
                data.push([req.body.root[gelen_data].mac,scanner_id])
            }
        }
        pool.query(format('INSERT INTO temp (card_id,scanner_id) VALUES %L',data)
        ).then(() => {
            pool.query('SELECT COUNT(*) as sayi FROM temp').then(res => {
                if (res.rows[0].sayi > 15){
                    console.log('Temizlenecek')
                }
                response.status(200).json(res.rows)
            }).catch(err =>{
                response.status(400).json({message:"Hata1" + err})
            })
        }).catch(err => {
            response.status(400).json({message:"Hata2" + err})
        });
    
    })

    Postgres'e geçince çatır çatır temiz oldu. Bilgili hocalarımız kontrol edebilirse then catch yapısı tam oturmuş mu diye yoksa tek catch ile işi bitirebilir miydik. Şuan isteğimi karşılıyor sadece daha iyisi nasıl yapılır diye merak ediyorum

    Hocam yol yakınken callback hell problemini araştır. Bugün işini çözersin ama 1 ay sonra 3 aylık ekstra eforun çıkar :) 


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
Toplam Hit: 1614 Toplam Mesaj: 10
nodejs expressjs