node.js - 不能在 Gatsby 中使用代理
问题描述
我正在使用Gatsby
并且正在尝试使用该Axios
库获取一些 API 内容,到目前为止,我已在以下配置中添加了以下配置gatsby-config.js
:
proxy: [
{
prefix: "/api",
url: process.env.API_URL,
},
],
whereAPI_URL
在开始gatsby-config.js
使用时加载:
require("dotenv").config({
path: `.env.${process.env.NODE_ENV}`,
})
现在的问题是当我执行这样的请求时:
const res = await axios.get("/api/sections")
这是使用http://localhost:8000/api/sections
which 实际上很奇怪执行的,因为我认为Gatsby
应该拦截/api
前缀,然后使用我使用API_URL
变量给出的 url。
我正在Gatsby
开发模式下运行。
我做错了什么?
解决方案
API_URL
未在gatsby-config.js
. 以下片段:
require("dotenv").config({
path: `.env.${process.env.NODE_ENV}`,
})
.env.development
告诉 Gatsby 在和中查找环境变量.env.production
(默认运行gatsby develop
或gatsby build
分别)。由于您没有定义环境文件,因此 Gatsby 不知道process.env.API_URL
.
在项目的根目录中创建一个.env.development
and并定义一个变量。.env.production
API_URL
API_URL= yourUrl.com
将您的 axios 请求更改为:
const axios = require('axios');
const res = await axios.get('/api/sections', {
proxy: {
host: process.env.API_URL,
port: 3000 //remove if not needed
}
});
之后,您的请求将被添加前缀。
如果您使用第三方模块,Gatsby 不会捕获外部请求。根据API Proxy 文档,它似乎只适用于原生 JavaScriptfetch
函数。
推荐阅读
- python - 使用默认为无过滤器的函数过滤熊猫数据框
- vue.js - 使用“Vue HTML to Paper”单击“打印”按钮时出错
- django - 如何在 Django 中解决“IntegrityError at /measurements/ NOT NULL 约束失败:diabetes_measurements.patient_id”探针
- android-studio - 禁用在 Android Studio 中阻止光标的内联提示
- dataframe - 如何使用具有不同列号pyspark的两个数据框的联合
- sql - 如何在 SQL Server 的触发器中获取多个字段的旧值和新值?
- ssl - Postman 中的错误:错误:写入 EPROTO 8768:错误:1408F10B:SSL 例程:ssl3_get_record:错误的版本号:
- html - 悬停在 DIV 上(增加高度 - 顶部和底部)而不影响其他 DIV
- c# - serialzie c#对象到不同类型的json数组
- python - Wagtail:如何覆盖 PageModel 的创建/编辑模板