# Javascript + couchDB



## wintermut3 (13. Feb 2017)

Hallo zusammen,
ich hoffe, dass ich mit meinem Anliegen in dieser Abteilung richtig bin. Ich bin gerade dabei mir ein bisschen Javascript und Node.js beizubringen und kriege ein bisschen Verständnisprobleme bei der RESTApi (hoff ich doch, dass ich da was nicht vertauscht habe )

Ich versuche gerade aus dem Backend die Daten aus der Datenbank auslesen und diese an die Frontend zu schicken. Also versuche ich aus dem Backend die Daten mit POST zu schicken und an der Frontend mit GET zu empfangen. Bitte nicht schlagen, bin neu zu diesem Thema und brauche da ein bisschen Zeit um mich da reinzudenken. ^^

Dies ist der Auszug aus meinem Backend:

app.post('/profile', function(req, res){

   var bytecoins;
   var energy;

   couch.get("player", "/herbert").then(({data, headers, status}) => {
       bytecoins = data.bytecoins;
       energy = data.energy
   }, err => {
       console.log(err)
   }); 
   res.send(bytecoins, energy);
})


Und das aus dem Frontend


update: function(){
            this.$http.get('/profile?bytecoins=' + this.bytecoins + '&energy=' + this.energy)
}


Dabei wird ein 500 für den /profile geschmissen. Gibt es eine Möglichkeit diese Daten vielleicht automatisiert aus der Datenbank zu laden? Im Moment rufe ich es über die "update" Funktion, die durch nen Knopf erzeugt wird. Es wäre aber schön, wenn das beim Laden der index.html passieren würde. Ich würde mich sehr freuen um ausführliche Erklärungen um die Hintergründe besser nachvollziehen können.

Besten Dank im Voraus

MfG

wintermute


----------



## mrBrown (13. Feb 2017)

wintermut3 hat gesagt.:


> Dabei wird ein 500 für den /profile geschmissen.


Wenn ich ich grad nicht vertue, greifst du mit GET auf /profile zu, hörst aber im Backend nur auf POST.



wintermut3 hat gesagt.:


> Gibt es eine Möglichkeit diese Daten vielleicht automatisiert aus der Datenbank zu laden? Im Moment rufe ich es über die "update" Funktion, die durch nen Knopf erzeugt wird. Es wäre aber schön, wenn das beim Laden der index.html passieren würde. Ich würde mich sehr freuen um ausführliche Erklärungen um die Hintergründe besser nachvollziehen können.


update einfach direkt beim Laden der Seite aufrufen, zb mit `$(document).ready`


----------



## wintermut3 (15. Feb 2017)

Ok, super... Danke. Das war das Problem. Ich bin ziemlich neu zu REST... ^^ Allerdings bin ich bei einer anderen Sache stecken geblieben. Wieder bei REST. Ich versuche gerade ein Array aus dem Frontend an das Backend zu senden. Diesmal mit POST, wenn ich das richtig bisher verstehe. Ich sende im Frontend mit POST und empfange es ebenfalls im Backend mit POST.

Hier passiert folgendes:
Es werden Daten in das Array geschrieben (im Frontend konnte ich diese auch detailliert empfangen). Das letzte Element wird an das Backend weitergereicht.

newReactor: function() {
            var that = this;

            this.reactor.push({
                id: uuid.v4(),
                owner: 'test',
                capacity: 'test',
                reactorEnergy: 'test',
                level: '1'
            });
            this.$http.post('/storereactors?id='+ this.reactor[this.reactor.length-1].id + '&owner=' + this.reactor[this.reactor.length-1].owner + '&capacity=' + this.reactor[this.reactor.length-1].capacity + '&reactorEnergy=' + this.reactor[this.reactor.length-1].reactorEnergy + '&level=' + this.reactor[this.reactor.length-1].level);
        }


Und hier werden die Daten im Backend empfangen, oder besser gesagt- nicht empfangen. Ich versuche hier die Daten in ein Array zu speichern um das nachher in die Couchdb als ein JSON Objekt abzulegen, aber es kommt folgende Fehlermeldung:
"TypeError: Cannot read property 'id' of undefined", und der Browser schmeißt ebenfalls einen 500 an der /storereactors.


//STORE REACTORS IN DATABASE
app.post('/storereactors', function(req) {
    var reactorsToDb = [];

   //PUT THE LAST BOUGHT REACTOR INTO ARRAY TO PUT IT LATER INTO DB
   var storeReactorsInDb = function(id, owner, capacity, reactorEnergy, level){
       reactorsToDb.push({
           'id': reactorsToDb[reactorsToDb.length-1].id,
           'owner': reactorsToDb[reactorsToDb.length-1].owner,
           'capacity': reactorsToDb[reactorsToDb.length-1].capacity,
           'reactorEnergy': reactorsToDb[reactorsToDb.length-1].reactorEnergy,
           'level': reactorsToDb[reactorsToDb.length-1].level
       });
   }

   storeReactorsInDb(req.query.id, req.query.owner, req.query.capacity, req.query.reactorEnergy, req.query.level);
})


Besten Dank im Voraus und viele Grüße

Wintermute

@UPDATE

Ok, hat sich erledigt. Falls noch jemand nach der Lösung für ähnliches Problem suchen soll, beim pushen im Backend nur den Parameter angeben, ohne der Angabe für die Position im Array.


var storeReactorsInDb = function(id, owner, capacity, reactorEnergy, level){
       reactorsToDb.push({
           'id': id,
           'owner': owner,
           'capacity': capacity,
           'reactorEnergy': reactorEnergy,
           'level': level
       });
       console.log(reactorsToDb[0].owner)
   }


----------

