Arbeiten mit NodeJS & JSON

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo zusammen,


    mittlerweile besitze ich eine eigene API die gewisse Daten aus meinem Forum abruft und diese als JSON Ausgabe wiedergibt. Das ganze schaut so aus.


    Code
    https://www.meinedomain.de/index.php?user-api&method=login&username=Meinusername&password=MeinPassword&secret=MeinSecretKey


    Als Ausgabe bekomme ich folgendes.



    Das ganze würde ich gerne in meinem Script umgesetzt haben, wie aber genau muss das umgesetzt werden?



    Meine Testfunktion scheint hier komplett falsch zu sein oder?




    Ich möchte halt anstelle aus der Datenbank den USer aus dem Forum abfragen und wenn der User in der Bürger gruppe ist (ID 4), dann darf er einloggen und der Server sagt ok!

  • Warum verbindest du dich nicht einfach zum MySQL Server des Forums auf deinem NodeJS Server? Wenn der Gameserver vom Forum abhängig ist, sorgt das eher für Probleme. (Forum Mal down = Niemand kann sich auf dem Server einloggen)
    Auch sendest du dann dort Name und Passwort des Nutzers nicht nur von Client zu Server sondern nochmal weiter übers Internet zu einem weiteren Server. Stichwort: Datensicherheit

  • Meine Api bietet ein wenig mehr als nur die Login Funktion.


    Daher werde ich nicht mit dem MySql Server der Foren Datenbank arbeiten. Bleiben wir daher bitte bei der Frage, wie setze ich das mir JSON um? Um die Datensicherheit braucht sich keiner einen Kopf machen. Das habe ich schon im Griff.

  • Du erweiterst die Funktion um 2 Parameter, Name und Passwort, dann kannst du mit diesen Variablen die URL für die Anfrage zusammensetzen. Da es eine HTTP Anfrage ist, würd es sich auch lohnen Promises zu verwenden. (Async/await) Dann kannst du das Callback weglassen. Ist aber natürlich deine Entscheidung ob du den klassischen Callbackstil von NodeJS verwendest oder es mit einer modernen Methode (Promises) machst.

  • Der erste Parameter des Callbacks ist der Fehler, falls keiner vorhanden ist, ist dieser null. Der zweite Parameter sind die empfangenen Daten.
    Du nutzt es also so:


    JavaScript
    loginUser(username, password, (error, data) => 
    {
        if(error) return console.log(error); // Bei einem Error sind keine Daten vorhanden, also muss returnt werden, damit der 2. Parameter nicht verwendet wird
        // ...
    });
  • Hab das mal so eingebaut wie du gesagt hast, funktioniert nicht.



  • So ist der Ausgabewert. Wenn man aber etwas falsches eingibt..


    Falsches Passwort / Kein User vorhanden ->



    Und wenn ich innerhalb von dem Code gewisse Sachen in der Console zum Testen ausgeben mag, functioniert das auch nicht. Als würde er das nicht aufrufen alles.

  • Versuch mal die Daten stringified zu printen. Dazu hast du auch statt dem data Parameter parsed verwendet, die Variable ist aber nur innerhalb der Funktion.

  • JavaScript
    var mysql = require('mysql');
    var http = require('http');
    const bcrypt = require('bcryptjs');
    const apiHost = "https://www.projekt-xyz.de";
    const apiSecret = "asasasasasasasasasasas";

    Ja habe ich bereits alles versucht. Klappt aber nicht.

  • Okay, also nun habe ich ein Response vom Server bekommen.


    Code
    The server did not respond with 200 - OK


    Das ganze wird aktuell als JSON so ausgegeben bei einem Aufruf.



    Mein Webserver is so konzipiert, dass er immer automatisch auf https umsteigt, kann ich die Anfrage auch in https versuchen?

  • So, das ganze ist nun als https, jedoch auch hier, keinerlei Response innerhalb der Console. Ich kann das ganze script in der Loginfunktion mit console.log("Aufruf A"); oder was auch immer pflastern, es passiert nüscht.


    Ich zeig mal auf wie genau etwas passiert.


    Login Form sendet an den Clientseitigen Script ein Befehl..




    Das Script geht also zum Clienten in das Verarbeitungsscript ...


    JavaScript
    mp.events.add("loginDataToServer", (username, password, state) => {
        mp.events.callRemote("sendDataToServer", username, password, state);
    });


    Dieses Script wiederrum ruft nun die Serverseite auf und macht halt folgendes.



    Ab hier verliert sich jegliche Meldung, es kommt kein Debug Log, es kommt kein Output nichts.