Necesito una solución. Estoy usando el módulo axios para obtener la respuesta de otro servidor y luego necesito exportar el valor a otro archivo usando Node.js. Estoy explicando mi código a continuación.
const axios = require('axios'); let protocol = ''; let opticalIp = ''; axios.get(`www.mydomain.com/api`).then(function(response) { //console.log('succ', response); if(response.data && response.data.data) { protocol = response.data.data['scheme']; opticalIp = response.data.data['optical_ip']; } }).catch(function(error) { console.log('error', error); }); console.log('data', opticalIp); const env = { API_URL: `${protocol}://${opticalIp}/`, configHeaders: '' }; module.exports = env; Aquí estoy obteniendo los datos de otro servidor y también aquí estoy devolviendo algún valor env a otro archivo. En mi caso, antes de la respuesta, el objeto env regresa, por lo que el valor API_URL se queda en blanco. Aquí necesito después de la respuesta exitosa, se preparará API_URL y luego este objeto env debería regresar a otro archivo donde sea que se llame. Por favor, ayúdame a encontrar la solución adecuada.
En este caso, solo querrá exportar una función a la que pueda llamar desde el otro archivo. Esto evitará un poco de dolor de cabeza más adelante. Dado que axios devuelve una promesa (de ahí la llamada .then()) después de la solicitud, puede simplemente devolver la llamada de solicitud de axios y modificar el valor que desee devolver desde la llamada .then().
Aquí hay una descripción general del encadenamiento de promesas proporcionada por javascript.info .
// CHILD MODULE const axios = require('axios'); function fetchOptical () { let protocol = ''; let opticalIp = ''; return axios.get(`https://10.0.12.17:9201/api/v1.0/settings/custom-form/Optical`) .then(function(response) { //console.log('succ', response); if(response.data && response.data.data) { protocol = response.data.data['scheme']; opticalIp = response.data.data['optical_ip']; const env = { API_URL: `${protocol}://${opticalIp}/`, configHeaders: '' }; console.log('data', opticalIp); return env } }).catch(function(error) { console.log('error', error); return error }); }) } module.exports = fetchOptical; // PARENT MODULE import child from './child' child().then(env => { })Modificar el protocol y la dirección IP API_URL opticalIp En su lugar, en el then , intente:
if(response.data && response.data.data) { const protocol = response.data.data['scheme']; const opticalIp = response.data.data['optical_ip']; env.API_URL = `${protocol}://${opticalIp}/`; } // Then when defining env: const env = { API_URL: null, // null or '' or whatever you want the default to be. configHeaders: '' };