Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js appengine上的React.js作为服务查询作为同一项目上的另一个服务运行的API_Node.js_Reactjs_Google App Engine_Proxy - Fatal编程技术网

Node.js appengine上的React.js作为服务查询作为同一项目上的另一个服务运行的API

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

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-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
服务的根目录中”,尽管我认为这只是一种约定。