• 16-02-2024, 20:58:58
    #1
    Merhaba arkadaşlar express ve ejs kullanarak bir şeyler yapmaya çalışıyorum aşağıdaki görselde görülen başlıklara tıkladığımda başlık altındaki boş sayfaya o başlığa ait içerikleri nasıl gönderebilirim?
    Örneğin Product alanına basıldığında product.ejs sayfasınının bu boş alana render olmasını istiyorum gibi.

  • 16-02-2024, 21:06:27
    #2
    İframe oluşturmanız veya sayfa kaynak kodunu request atıp almanız ve değiştirmeniz gerekir. Request alıp değiştirirseniz window objesinde ck editör gibi bazı kütüphanelerin yaptığı değişiklikler nedeniyle hata alabilirsiniz.
    Bahsettiğiniz şey SPA. Ejs ile bunu yapmanın en iyi yolu iframe.
    • pess1nu5
    pess1nu5 bunu beğendi.
    1 kişi bunu beğendi.
  • 16-02-2024, 23:36:57
    #3
    Misafir adlı üyeden alıntı: mesajı görüntüle
    İframe oluşturmanız veya sayfa kaynak kodunu request atıp almanız ve değiştirmeniz gerekir. Request alıp değiştirirseniz window objesinde ck editör gibi bazı kütüphanelerin yaptığı değişiklikler nedeniyle hata alabilirsiniz.
    Bahsettiğiniz şey SPA. Ejs ile bunu yapmanın en iyi yolu iframe.
    İframe değil de daha profesyonel bi işlem yok mu hocam acaba? hiçbir yerde iframe ile yapılmamış çünkü
  • 16-02-2024, 23:42:19
    #4
    pess1nu5 adlı üyeden alıntı: mesajı görüntüle
    İframe değil de daha profesyonel bi işlem yok mu hocam acaba? hiçbir yerde iframe ile yapılmamış çünkü
    React vue angular vb kullanırsanız bunlara gerek kalmadan spa işlemini kendileri yapıyorlar zaten hocam ama html de fazla seçeneğiniz yok.
    Ben bu tür işlemleri genelde gizleyerek yapıyorum. Her sayfanın html ini ekliyorum diğerlerini display none ile gizleyip tıklandıkça gösteriyorum. Ya böyle ya html kodunu js değişkenine atayıp tıklandığında js değişkenşndeki html i append etmeniz gerekiyor.
    • pess1nu5
    pess1nu5 bunu beğendi.
    1 kişi bunu beğendi.
  • 16-02-2024, 23:44:45
    #5
    🌐 𝘀𝗼𝗰𝗶𝗳𝗹𝘆.𝗰𝗼𝗺
    https://expressjs.com/en/guide/routing.html

    Routing ile yapabilirsin.
  • 16-02-2024, 23:48:34
    #6
    tolgasen adlı üyeden alıntı: mesajı görüntüle
    Selamlar Tolga hocam. şu şekilde bir çözüm nasıl olur?

    app.get('/main', function(req, res) {
        res.render('main');
    });
    document.querySelector('.personal-info').addEventListener('click', function() {
        fetch('/main')
            .then(response => response.text())
            .then(data => {
                document.querySelector('main').innerHTML = data;
            });
    });
  • 16-02-2024, 23:51:13
    #7
    🌐 𝘀𝗼𝗰𝗶𝗳𝗹𝘆.𝗰𝗼𝗺
    pess1nu5 adlı üyeden alıntı: mesajı görüntüle
    Selamlar Tolga hocam. şu şekilde bir çözüm nasıl olur?

    app.get('/main', function(req, res) {
        res.render('main');
    });
    document.querySelector('.personal-info').addEventListener('click', function() {
        fetch('/main')
            .then(response => response.text())
            .then(data => {
                document.querySelector('main').innerHTML = data;
            });
    });
    Evet, bu tam olarak işini görecektir.
    site.com/main olarak çağırılmasın, sadece fetch ile çağırılsın istersen de fetch isteğine header olarak bir token ekleyip router içinde o header var mı yok mu onu kontrol edebilirsin.
  • 16-02-2024, 23:53:26
    #8
    tolgasen adlı üyeden alıntı: mesajı görüntüle
    Evet, bu tam olarak işini görecektir.
    site.com/main olarak çağırılmasın, sadece fetch ile çağırılsın istersen de fetch isteğine header olarak bir token ekleyip router içinde o header var mı yok mu onu kontrol edebilirsin.
    Anladım değerli bilgiler için teşekkür ederim. Tolga hocam. şu şekilde çevirdim.
    app.use('/main', function(req, res, next) {
        if (!req.xhr) {
            return res.status(403).send('Forbidden');
        }
        next();
    });
    
    app.get('/main', function(req, res) {
        res.render('main');
    });
  • 16-02-2024, 23:55:53
    #9
    🌐 𝘀𝗼𝗰𝗶𝗳𝗹𝘆.𝗰𝗼𝗺
    Ek bir middleware yazmana gerek yok hocam.

    app.get('/main', function(req, res) {
        if (!req.xhr) return res.status(403).send('Forbidden');
        res.render('main');
    });