gpt4 book ai didi

google-app-engine - 用于 SPA 和客户端路由的 AppEngine dispatch.yaml

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:25 26 4
gpt4 key购买 nike

我有一个 Go 服务器,其中有一个 API 和一个带有 SPA(单页应用程序)的静态客户端 build 文件夹。由于 SPA 应该有客户端路由,我必须确保所有路径都映射到前端。例如,http://myapp.com/djaksfjal 不应在浏览器中显示 404,它应始终路由到我的 SPA 中的路由。

现在我也想有一个后端 API,所以所有对 /api 的请求都应该转到 Go 后端。

问题:如何使用 AppEngine 进行设置?我尝试了两个 app.yaml 文件和一个 dispatch.yaml 文件,但无法让它工作。

client-app.yaml

runtime: go
api_version: go1
service: default

handlers:
- url: /
static_files: build/index.html
upload: build/index.html
- url: /*
static_dir: build

server-app.yaml

runtime: go
api_version: go1
service: test-backend

handlers:
- url: /api/*
script: _go_app

dispatch.yaml

dispatch:
- url: "*/api/*"
service: test-backend

你好.go包主

import (
"fmt"
"net/http"
"google.golang.org/appengine"
)

func main() {
http.HandleFunc("/api/hello", handle)
appengine.Main()
}

func handle(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world!")
}

然后运行 ​​dev_appserver.py server-app.yaml client-app.yaml dispatch.yaml 并转到调度服务器所在的 localhost:8080。但是,这不起作用。客户端路由接管一切,忽略 /api/hello 路由。

已测试:localhost:8080/api/hello。 期待:api路由回复。 得到:静态客户端回复

如果我将 client-app.yaml 更改为不使用 * 那么 /api/hello 路由就可以工作,但是当然客户端路由不起作用,因为我需要所有路由到客户端,以便它可以自己处理路由(/api 路由除外)。

最佳答案

dispatch.yaml 文件中的规则顺序很重要 - 第一个模式匹配获胜。所以你首先需要 */api

此外 - 如果没有任何规则模式匹配请求将是 default 服务的路由器,无需为此添加规则。

我还看到您提到了 /api/hello 请求路径 - 为了使其正常工作,您可能需要将 */api 模式扩展为 */api/*

所以我会使用这个 dispatch.yaml 文件:

dispatch:
- url: "*/api/*"
service: test-backend

你还需要在server-app.yaml文件中展开/api模式,否则/api/hello会给出一个404:

handlers:
- url: /api/*
script: _go_app

旁注:您不应该(需要)转到 localhost:8080 - 这只会将您转到默认服务。请注意开发服务器为每个模块/服务监听的各个端口,这些端口会在服务器启动时显示。

关于google-app-engine - 用于 SPA 和客户端路由的 AppEngine dispatch.yaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49433001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com