Javascript-forum
Express Post Abfrage - Druckversion

+- Javascript-forum (https://javascript-forum.de)
+-- Forum: Entwicklung (https://javascript-forum.de/forumdisplay.php?fid=4)
+--- Forum: Javascript (https://javascript-forum.de/forumdisplay.php?fid=6)
+--- Thema: Express Post Abfrage (/showthread.php?tid=2216)



Express Post Abfrage - Florian86 - 10.03.2023

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
Code:
'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
Code:
'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
Code:
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


RE: Express Post Abfrage - rzscout - 11.03.2023

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:
Code:
'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


RE: Express Post Abfrage - Florian86 - 12.03.2023

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


RE: Express Post Abfrage - Florian86 - 13.03.2023

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.

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



RE: Express Post Abfrage - Florian86 - 22.03.2023

Hallo,

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

Code:
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");
                }
               
        }
);