This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Express Post Abfrage
#1
Hallo Zusammen,

ich habe das Problem, dass ich bestimmte Werte in einer SAP Datenbank abfragen möchte, was auch funktioniert.
Leider muss ich jede Abfrage 2 mal durchführen um das richtige Ergebnis zu erhalten.
Nach Neuladen der Seite bekomme ich beim ersten Klick auf den Button immer undefined und beim 2. Klick erst mein Ergebnis.

Wiederhole ich das mit anderen Daten ohne die Seite neu zu laden, bekomme ich immer erst den alten abgefragten Wert und bei erneuten Klick erst die gewünschten Ergebnisse.


Frontend
'use strict';
document.getElementById("anzeige").addEventListener("click",function(){
   
    var mat = document.getElementById("mat").value
    var lgort = document.getElementById("lgort").value
    var mhd = document.getElementById("mhd").value

    var data =  {
        "material" : mat,
        "lagerort" : lgort,
        "mhd" : mhd
    };

    const options = {
        method: 'POST',
        headers:{ 'Content-Type': 'application/json' },
        body:JSON.stringify(data)
    };

postfile(options);  

});

async function postfile(options){
    const response = await fetch('/zwmbestand',options);
    const data = await response.json();

console.log(data);
}

Backend
'use strict';

var express = require('express');
var sap = require('./zbestand.js');

var router = express();

router.post('/zwmbestand',async (req,res,next) => {
                                              
    let result = await sap.bestandquery(req.body);
                                                                              
    res.send(`${result}`);
    
});

module.exports = router;

DB Abfrage sap.Bestandsquery
module.exports = {

    bestandquery : function(body){
        var dbConnection = hana.createConnection();
        
select = SQL Abfrage


        // aktuelles select auslesen
        dbConnection.connect(connOptions, async function (err) {
        if (err) console.log(err);
                var han = await dbConnection.exec(select);
                            
                datatransport = JSON.stringify(han, null, 2);
                      
        });
        dbConnection.disconnect();        
                                        
    return datatransport;
    },  

};

Grüße

Florian86


Angehängte Dateien Bild(er)
   
Zitieren
#2
Moin Florian86,
dein Code sieht sehr interessant aus. Du solltest sicher gehen das der DOM geladen wurde. Da es Probleme geben kann gibt es da einige Möglichkeiten um das Problem zu lösen. Mithilfe des Events DOMContentLoaded können wir sicher gehen das der DOm geladen wurde.

Hier ein kleines Beispiel dazu:
'use strict';
document.addEventListener('DOMContentLoaded', () => {
// Hier kommt dein Code rein
});


Das Problem ist bei JavaScript wenn man versucht Variablen mit Selektor-Methoden zu Elementen zuzuweisen und der DOM noch nicht geladen wurde. Dadurch ist das Element nicht selektiert und ein hinzufügen von EventListener oder Zugriff auf Methoden und Eigenschaften des Elements führen folglich zu Fehlern, da diese nicht vorhanden sind.

Viele Grüße

rzscout
"Gerne dürft ihr mir eine gute Bewertung da lassen aber auch gegenüber Kritik bin ich offen" Angel
Als Lösung markieren Zitieren
#3
Ich bekomme folgenden Fehler. Mir sieht es danach aus das ich noch kein Ergebnis bekommen habe
   
Den die Daten sendet er richtig an den Server
   
Nur zurück bekomme ich nichts.
   
Klicke ich dann wiederholt auf meinen Anzeige Button bekomme ich meine gewünschten Ergebnisse.
   


Grüße

Florian
Als Lösung markieren Zitieren
#4
Hallo,

mir ist nun aufgefallen das mein await nicht greift und res.send() vorher ausgeführt wird.
Wie kann ich sicherstellen das res.send() erst ausgeführt wird wenn meine funktion sap.bestandsquery abgeschlossen ist.

router.post('/zwmbestand', async (req,res,next) => {
                                           
        const result =  await sap.bestandquery(req.body);
     
        res.send(`${result}`);
        }
);
Als Lösung markieren Zitieren
#5
Hallo,

ich habe es nun mit einem Callback gelöst und funktioniert...

router.post('/zwmbestand', (req,res,next) => {
                                           
                try {
                        bestandsquery(req.body,function(callback){
                                
                                res.send(`${callback}`);
                        });
                        
                } catch (error) {
                        console.error(error);
                        res.status(500).send("Fehler bei der Abfrage des SAP-Bestands aufgetreten");
                }
               
        }
);
Als Lösung markieren Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste