• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

erste SQL Abfrage undefined

Flosche86

New member
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 "Anzeige" immer undefined und beim 2. Klick erst mein Ergebnis.

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

Screenshot_1.png

Frontend
Javascript:
'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
Javascript:
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
Javascript:
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

Florian
 
Hi und Guten Tag!

Wenn das Frontend ein Browser ist tippe ich auf das Cache Feature. Was ist die Frage?
 
Wie genau sieht denn dieses "undefined" nach Klick auf "Anzeige" genau aus und was steht in der Browserconsole?
 
Ich bekomme folgenden Fehler. Mir sieht es danach aus das ich noch kein Ergebnis bekommen habe

Screenshot_2.png

Den die Daten sendet er richtig an den Server
payload.png

Nur zurück bekomme ich nichts.
undefined.png

Klicke ich dann wiederholt auf meinen Anzeige Button bekomme ich meine gewünschten Ergebnisse.
Result.png

Grüße

Florian
 
Dann würde ich im Server Code ein paar Debug Ausgaben in eine Datei schreiben lassen um zu sehen, bis wohin es kommt.
 
Hallo

mir ist beim debuggen nun aufgefallen, dass mein await nicht greift und res.send() vorher ausgeführt wird. Wie kann ich das verhindern?

await.jpg
 
Um sicherzustellen, dass res.send() erst ausgeführt wird, nachdem await abgeschlossen ist, kannst Du await in einer separaten Funktion aufrufen und dann die Antwort in der Callback-Funktion senden. Hier ist ein Beispiel:

Javascript:
async function querySapAndSendResponse(req, res) {
  try {
    const result = await sap.bestandquery(req.body);
    res.send(`${result}`);
  } catch (error) {
    console.error(error);
    res.status(500).send("Fehler bei der Abfrage des SAP-Bestands aufgetreten");
  }
}

querySapAndSendResponse(req, res);

Dadurch wird sichergestellt, dass res.send() erst aufgerufen wird, nachdem await abgeschlossen ist. Beachte, dass hier eine try-catch-Klausel verwendet wird, um Fehler beim Aufruf von sap.bestandquery() abzufangen und eine passende Fehlermeldung an den Client zu senden.
 
Habe es mit einem Callback gelöst

Javascript:
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");
                }
              
        }
);
 
Zurück
Oben