Node.js appengine上的React.js作为服务查询作为同一项目上的另一个服务运行的API
React.js前端作为Node.js appengine上的React.js作为服务查询作为同一项目上的另一个服务运行的API,node.js,reactjs,google-app-engine,proxy,Node.js,Reactjs,Google App Engine,Proxy,React.js前端作为project-id.appspot.com上的默认服务运行 它正在查询在API-dot-project-id.appspot.com上运行的API 我知道package.json中的代理设置只能在开发中使用。使用API的绝对URL会导致CORS问题 解决这个问题的最佳方法是什么 以下是我尝试的内容。 我在我的后端API服务app.yaml中添加了以下内容: handlers: - url: /api/(.*) http_headers: Access-Con
project-id.appspot.com
上的默认服务运行
它正在查询在API-dot-project-id.appspot.com
上运行的API
我知道package.json中的代理设置只能在开发中使用。使用API的绝对URL会导致CORS问题
解决这个问题的最佳方法是什么
以下是我尝试的内容。
我在我的后端API服务app.yaml中添加了以下内容:
handlers:
- url: /api/(.*)
http_headers:
Access-Control-Allow-Origin: https://project-id.appspot.com
现在,我在尝试部署时遇到以下错误:
Unknown url handler type.
<URLMap
secure=default
static_files=None
application_readable=None
auth_fail_action=redirect
require_matching_file=None
static_dir=None
redirect_http_response_code=None
http_headers={u'Access-Control-Allow-Origin': 'https://project-id.appspot.com'}
url=/api/(.*)
script=None
upload=None
api_endpoint=None
expiration=None
position=None
login=optional
mime_type=None
>
未知的url处理程序类型。
我认为使用同源策略绕过问题的最简单方法是创建(或更新)项目文件,通过默认域project-id.appspot.com
将API请求路由到API服务
这样,您就不必担心前端和API之间的同源问题,因为它们都来自同一个域,即使它们作为单独的应用程序引擎服务运行。在将应用程序划分为多个服务时,这种方法省去了我很多麻烦
您的dispatch.yaml
文件如下所示:
dispatch:
- url: "*/api/*"
service: API
然后您位于
project-id.appspot.com
的前端只需向https://project-id.appspot.com/api/*
,这些请求将被路由到API服务。从与API相同的域为前端提供服务。。。或为API启用CORS。。。或通过将数据请求路由到API的代理为您的React提供服务。我添加了我的app.yaml edit和由此产生的错误。您缺少处理程序类型,即脚本
或静态\u dir
/静态\u文件
语句。因此,似乎无法为API设置http\u头,这只是针对静态文件?是吗?app.yaml中的http\u头
只能为静态文件或目录处理程序的响应设置。如果您需要在脚本
处理程序中设置HTTP头,则应该在应用程序的代码中设置。这里有记录:谢谢。dispatch.yaml文件将用于默认(前端)服务?每个项目只有一个dispatch.yaml
,与cron.yaml
和queue.yaml
非常相似。appengine建议“应该将分派文件放在项目目录的根目录中,或者放在default
服务的根目录中”,尽管我认为这只是一种约定。