Tengo muchas funciones que se ejecutan y usan el mismo encabezado para las llamadas a la API, así que usé una variable y asigné los encabezados en la parte superior.
Sin embargo, está devolviendo indefinido para la clave de acceso y mi programa falla. Así que simplemente registré la clave de acceso en la consola, como process.env.ACCESS_KEY , y obtengo la clave. ¿Cómo lo asigno correctamente al objeto de encabezados para que no se devuelva indefinido?
import axios from 'axios'; const headers = { Accept: 'application/json', 'Content-Type': 'application/json', AccessKey: process.env.ACCESS_KEY, }; const createMan = async (name: string) => { const body = JSON.stringify({ Name: name, }); const resp = await axios.post('https://example.com', body, { headers, }); console.log(headers)//AcccessKey is undefined in the headers object console.log(process.env.ACCESS_KEY) //shows the access key. How? return id; };Parece que process.env.ACCESS_KEY se agrega a process.env (que es modificable) más tarde, en otro código que no se muestra, en lugar de ser configurado por Node.js cuando se inicia el proceso. Tres formas de abordar esto:
Haga que otros headers de actualización de código también.
Haga de AccessKey una propiedad de acceso que se recupera de process.env.ACCESS_KEY cada vez que se usa:
const headers = { Accept: "application/json", "Content-Type": "application/json", get AccessKey() { return process.env.ACCESS_KEY; }) }; Tenga un módulo que A) obtenga la clave de acceso (sin embargo, es a lo que se asigna process.env.ACCESS_KEY ) y B) crea y exporta una instancia de Axios. (Más abajo).
Usaría # 1 o # 3 si es posible, pero # 2 también funcionará si el valor de process.env.ACCESS_KEY se completó antes de usar AccessKey .
Más sobre el n.° 3:
Axios tiene una función útil en la que puede crear una instancia preconfigurada con valores predeterminados modificados, por lo que no tiene que especificar esos valores predeterminados en cada llamada. Se ve así (de la documentación ):
const instance = axios.create({ baseURL: "https://some-domain.com/api/", timeout: 1000, headers: {"X-Custom-Header": "foobar"} }); Entonces, en cualquier código que tenga actualmente que esté configurando process.env.ACCESS_KEY , puede hacer esto:
const accessKey = codeThatGetsTheAccessKey(); export const myAxios = axios.create({ headers: { Accept: "application/json", "Content-Type": "application/json", AccessKey: accessKey, } });Luego, importaría esa instancia de Axios (en lugar de usar la instancia global) y la usaría
import { myAxios } from "./your-module.js"; const createMan = async (name: string) => { const body = JSON.stringify({ Name: name, }); const resp = await myAxios.post("https://example.com", body); return id; // ??? I'm not sure where this came from };En primer lugar, si tiene muchas llamadas que usan el mismo encabezado, puede establecer el valor del encabezado una vez, no es necesario enviar encabezados en cada llamada.
axios.defaults.headers.common['AccessKey'] = process.env.ACCESS_KEY;si no obtiene valor de las variables de su entorno, use https://www.npmjs.com/package/dotenv
Aplicación.js
require('dotenv').config() // import at the top