2017-01-24 5 views
0

Ich versuche, einen Knotenserver als Vermittler zwischen Firebase und meiner nativen App zu verwenden.Warum wird meine Abrufantwort in meinem Versand nicht bestanden?

Kann mir bitte jemand sagen, was ich hier falsch mache?

export const fetchPostsByNewest =() => { 
    return (dispatch) => { 
    fetch('http://localhost:3090/') 
    .then((response) => { 
     console.log(response.json()); 
     //dispatch({ type: NEW_POSTS_FETCH_SUCCESS, payload: response.json()}); 
    }); 
    }; 
}; 

dies ist der Knoten/Express-Router:

const router = (app) => { 
    app.get('/', (req, res) => { 

    firebase.database().ref('/social/posts') 
     .once('value', snapshot => res.json(snapshot.val())); 
    }); 
}; 

Wenn ich mir dies die response.json() dann nur erhalten console.log:

enter image description here

Wenn ich Antwort console.log, ich Holen Sie sich dies:

enter image description here

Wie kann ich die Header loswerden? Wenn ich console.log(response._bodyInit) tun dann das ich bekommen:

enter image description here

das wie folgt aussieht, was ich brauche.

Aber wenn ich es durch als Nutzlast passieren dann bekomme ich diesen Fehler:

enter image description here

Meine vorherige Aktion Schöpfer direkt mit Feuerbasis gearbeitet, wie folgt aus:

export const fetchPostsByNewest =() => { 
    return (dispatch) => { 
    firebase.database().ref('/social/posts') 
     .once('value', snapshot => { 
     console.log(snapshot.val()) 
      dispatch({ type: NEW_POSTS_FETCH_SUCCESS, payload: snapshot.val() }); 
     }); 
    }; 
}; 

Wenn ich console.log(snapshot.val()). Dann habe ich diese:

enter image description here

Dies funktioniert gut und sieht genauso aus wie die letzte console.log von console.log(response._bodyInit).

Was mache ich hier falsch? Ich würde jede Hilfe sehr schätzen.

Vielen Dank!

+0

Ihr erster Code wird dazu führen, dass eine Promise zu 'undefined' aufgelöst wird - weil Sie nichts in' .then' zurückliefern ... und übrigens 'response.json()' gibt auch ein Promise zurück –

Antwort

1

response.json() ein Versprechen zurück, so dass Sie einen anderen Link brauchen in der Versprechung Kette

export const fetchPostsByNewest =() => { 
    return (dispatch) => { 
     fetch('http://localhost:3090/') 
     .then((response) => response.json()) 
     .then((json) => { 
      console.log(json); 
      dispatch({ type: NEW_POSTS_FETCH_SUCCESS, payload: json}); 
     }); 
    }; 
}; 

Wenn Sie nicht brauchen, die json

console.log
+0

Vielen Dank, gute Nacht! – bloppit

1

Fetch funktioniert ein wenig anders, wenn Sie response.json() nennen, das ein anderes Versprechen zurück, so dass Sie an die Kette benötigen eine andere then, nachdem Sie das neue Versprechen zurück:

fetch('http://localhost:3090/') 
    .then(response => response.json()) 
    .then(aFunctionToDoSomethingWithTheJson); 
+0

Danke Sie für so hilfreich und schnell zu reagieren :) – bloppit

Verwandte Themen