angular vercel cors 问题中生产模式的项目[已解决]
angular project on production mode in vercel cors problem [solved]
我开发了一个angular项目,这个项目angular版本是11.0.2。在我本地开发项目时,我定义了一个 proxy.config.json 并且它是 运行 没有任何cors问题。
当我决定发布项目时,部署到 Vercel 但 http 客户端请求 return cors 错误。我的 vercel.json 配置文件是
{
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "Access-Control-Allow-Credentials", "value": "true" },
{ "key": "Access-Control-Allow-Origin", "value": "*" },
{ "key": "Access-Control-Allow-Methods", "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" }
]
}
]
}
我了解到 proxy.conf.json 文件无法在生产模式下工作。我将所有服务请求 api 端点 url 更新为真实字符串 url.
我在 postman 上测试了所有 api 个端点,后端正常工作
我用这个 vercel.json 配置文件解决了这个问题
{
"rewrites": [
{ "source": "/api/:match*", "destination": "https://api.endpoint.url/:match*" }
],
"headers": [
{
"source": "api/(.*)",
"headers": [
{ "key": "Access-Control-Allow-Credentials", "value": "true" },
{ "key": "Access-Control-Allow-Origin", "value": "*" },
{ "key": "Access-Control-Allow-Methods", "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" }
]
}
]
}
我所有的 http 客户端请求都是这样
this.http.post<Response>(`api/${service}`);
我开发了一个angular项目,这个项目angular版本是11.0.2。在我本地开发项目时,我定义了一个 proxy.config.json 并且它是 运行 没有任何cors问题。
当我决定发布项目时,部署到 Vercel 但 http 客户端请求 return cors 错误。我的 vercel.json 配置文件是
{
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "Access-Control-Allow-Credentials", "value": "true" },
{ "key": "Access-Control-Allow-Origin", "value": "*" },
{ "key": "Access-Control-Allow-Methods", "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" }
]
}
]
}
我了解到 proxy.conf.json 文件无法在生产模式下工作。我将所有服务请求 api 端点 url 更新为真实字符串 url.
我在 postman 上测试了所有 api 个端点,后端正常工作
我用这个 vercel.json 配置文件解决了这个问题
{
"rewrites": [
{ "source": "/api/:match*", "destination": "https://api.endpoint.url/:match*" }
],
"headers": [
{
"source": "api/(.*)",
"headers": [
{ "key": "Access-Control-Allow-Credentials", "value": "true" },
{ "key": "Access-Control-Allow-Origin", "value": "*" },
{ "key": "Access-Control-Allow-Methods", "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" }
]
}
]
}
我所有的 http 客户端请求都是这样
this.http.post<Response>(`api/${service}`);