Quiero codificar una aplicación con React-Native que carga archivos JSON desde un sitio web con autenticación de cookies. Para probarlo, lo probé en un archivo JS normal sin React-native y con request-promise.
const fs = require("fs"); const request = require("request-promise").defaults({ jar: true }); async function main() { var incodeHeader = ""; var incodeToken = ""; try { const loginResult = await request.post("https://somepage/login.php", { form: { client: "XXX", login: "username", password: "password", }, }); } catch (err) { console.log(err); } incodeHeader = getIncodeHeader(); incodeToken = getIncodeToken(); const data = await request.post("https://somepage/load.json", { headers: { [incodeHeader]: incodeToken, }, form: { max: "10", }, }); fs.writeFileSync("data.json", data); } main();Esto funcionó bien, así que quería usar este método en mi aplicación, pero no pude encontrar una manera de usar request-promise en React-Native, así que decidí usar axios.
const axios = require("axios"); const qs = require("qs"); axios.defaults.withCredentials = true; async function main() { const data = { client: "XXX", login: "username", password: "password", }; await axios .post("https://somepage/login.php", qs.stringify(data)) .catch((err) => console.log(err)); const incodeHeader = getIncodeHeader(); const incodeToken = getIncodetoken(); await axios .get( "https://somepage/load.json", { data: { max: "5" } }, { headers: { [incodeHeader]: incodeToken, }, } ) .then((respone) => console.log(respone)) .catch((err) => console.log(err)); } main();Pero en este código ni siquiera funciona el inicio de sesión y realmente no sé por qué. ¿Alguien puede decirme cómo hacer esto bien, o puede decirme otra solución que funcione en React-Native?
cambiar await axios.get a await axios.post
Primero, no sé por qué está encadenando el cuerpo de la solicitud en la primera solicitud, axios ya maneja esto, puede pasar solo el objeto data , tal vez sea la solución para su problema.
Segundo (solo un consejo). Cree un objeto de ayuda para realizar solicitudes http y no instanciar axios directamente, de modo que pueda cambiar el controlador de solicitudes http de una manera fácil en lugar de cambiarlo en cada archivo, un día probablemente necesitará hacer esto si desea mantener tu aplicación actualizada.
Tercero, no mezcle await y then , elija:
try { const result = await action(); // ... } catch (err) { // ... }o
action() .then((result) => { // ... }) .catch((err) => { // ... });