环境变量未定义在顶部定义
environment variable undefined defined at top
我有很多函数,运行 对 api 调用使用相同的 header,所以我使用了一个变量并在顶部分配了 header。
但是,return未定义 accesskey,我的程序崩溃了。所以我只是控制台记录了访问密钥以及 process.env.ACCESS_KEY
,我正在获取密钥。我如何正确地将它分配给 headers object 以便它不会 return 未定义?
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;
};
首先,如果你有很多调用使用相同的header那么你可以设置一次header值,不需要在每个调用中发送headers .
axios.defaults.headers.common['AccessKey'] = process.env.ACCESS_KEY;
如果您没有从环境变量中获取价值,那么请使用
https://www.npmjs.com/package/dotenv
App.js
require('dotenv').config() // import at the top
听起来 process.env.ACCESS_KEY
稍后在未显示的其他代码中添加到 process.env
(可修改),而不是在进程启动时由 Node.js 设置。解决这个问题的三种方法:
也更新其他代码headers
。
使 AccessKey
成为每次使用时从 process.env.ACCESS_KEY
检索的访问器 属性:
const headers = {
Accept: "application/json",
"Content-Type": "application/json",
get AccessKey() { return process.env.ACCESS_KEY; })
};
有一个模块,A) 获取访问密钥(但是 process.env.ACCESS_KEY
被分配给它)和 B) 创建并导出 Axios 实例。 (更多内容在下方。)
如果可能的话,我会使用#1 或#3,但#2 也可以工作如果 process.env.ACCESS_KEY
值在AccessKey
之前被填充被使用了。
关于#3 的更多信息:
Axios 有一个有用的功能,您可以在其中创建一个 实例 并预先配置修改后的默认值,因此您不必在每次调用时都指定这些默认值。看起来像这样(来自 the documentation):
const instance = axios.create({
baseURL: "https://some-domain.com/api/",
timeout: 1000,
headers: {"X-Custom-Header": "foobar"}
});
因此,在您当前设置 process.env.ACCESS_KEY
的任何代码中,您都可以这样做:
const accessKey = codeThatGetsTheAccessKey();
export const myAxios = axios.create({
headers: {
Accept: "application/json",
"Content-Type": "application/json",
AccessKey: accessKey,
}
});
然后,您将导入该 Axios 实例(而不是使用全局实例)并使用它
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
};
我有很多函数,运行 对 api 调用使用相同的 header,所以我使用了一个变量并在顶部分配了 header。
但是,return未定义 accesskey,我的程序崩溃了。所以我只是控制台记录了访问密钥以及 process.env.ACCESS_KEY
,我正在获取密钥。我如何正确地将它分配给 headers object 以便它不会 return 未定义?
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;
};
首先,如果你有很多调用使用相同的header那么你可以设置一次header值,不需要在每个调用中发送headers .
axios.defaults.headers.common['AccessKey'] = process.env.ACCESS_KEY;
如果您没有从环境变量中获取价值,那么请使用 https://www.npmjs.com/package/dotenv
App.js
require('dotenv').config() // import at the top
听起来 process.env.ACCESS_KEY
稍后在未显示的其他代码中添加到 process.env
(可修改),而不是在进程启动时由 Node.js 设置。解决这个问题的三种方法:
也更新其他代码
headers
。使
AccessKey
成为每次使用时从process.env.ACCESS_KEY
检索的访问器 属性:const headers = { Accept: "application/json", "Content-Type": "application/json", get AccessKey() { return process.env.ACCESS_KEY; }) };
有一个模块,A) 获取访问密钥(但是
process.env.ACCESS_KEY
被分配给它)和 B) 创建并导出 Axios 实例。 (更多内容在下方。)
如果可能的话,我会使用#1 或#3,但#2 也可以工作如果 process.env.ACCESS_KEY
值在AccessKey
之前被填充被使用了。
关于#3 的更多信息:
Axios 有一个有用的功能,您可以在其中创建一个 实例 并预先配置修改后的默认值,因此您不必在每次调用时都指定这些默认值。看起来像这样(来自 the documentation):
const instance = axios.create({
baseURL: "https://some-domain.com/api/",
timeout: 1000,
headers: {"X-Custom-Header": "foobar"}
});
因此,在您当前设置 process.env.ACCESS_KEY
的任何代码中,您都可以这样做:
const accessKey = codeThatGetsTheAccessKey();
export const myAxios = axios.create({
headers: {
Accept: "application/json",
"Content-Type": "application/json",
AccessKey: accessKey,
}
});
然后,您将导入该 Axios 实例(而不是使用全局实例)并使用它
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
};