Maison >développement back-end >Golang >Problème lors de l'utilisation du gestionnaire d'actifs Wails avec un routeur personnalisé

Problème lors de l'utilisation du gestionnaire d'actifs Wails avec un routeur personnalisé

WBOY
WBOYavant
2024-02-12 16:30:07984parcourir

使用自定义路由器使用 wails 资产处理程序时出现问题

Contenu de la question

J'essaie d'utiliser un multiplexeur personnalisé avec un gestionnaire d'actifs Wails, mais lorsque j'essaie d'obtenir quelque chose, je continue d'obtenir la page index.html. J'ai ajouté une instruction print en haut de la fonction servehttp du multiplexeur, mais celle-ci n'est appelée qu'une seule fois lorsque le favicon.ico est récupéré au début du programme.

J'ai le fichier maître suivant :

package main

import (
    "embed"
    "fmt"

    "github.com/nigel2392/router/v3"
    "github.com/nigel2392/router/v3/request"
    "github.com/wailsapp/wails/v2"
    "github.com/wailsapp/wails/v2/pkg/options"
    "github.com/wailsapp/wails/v2/pkg/options/assetserver"
)

var router *router.router = router.newrouter(true)

func init() {
    router.get("/about", func(r *request.request) {
        fmt.println("about")
        r.writestring("about")
    })
}

//go:embed all:frontend/dist
var assets embed.fs

func main() {
    // create an instance of the app structure
    app := newapp()

    // create application with options
    err := wails.run(&options.app{
        title:  "new",
        width:  1024,
        height: 768,
        assetserver: &assetserver.options{
            assets:  assets,
            handler: router,
        },
        backgroundcolour: &options.rgba{r: 27, g: 38, b: 54, a: 1},
        onstartup:        app.startup,
        bind: []interface{}{
            app,
        },
    })

    if err != nil {
        println("error:", err.error())
    }
}

Je peux voir le résultat suivant dans le terminal :

deb | [externalassethandler] loading 'http://localhost:3000/favicon.ico'
deb | [externalassethandler] loading 'http://localhost:3000/favicon.ico' failed, using assethandler

# print statement at the top of the servehttp function, 
# prints the requested path, and the available router paths.
path:  /favicon.ico
get /about ->

deb | [externalassethandler] loading 'http://localhost:3000/about'


to develop in the browser and call your bound go methods from javascript, navigate to: http://localhost:34115
deb | [externalassethandler] loading 'http://localhost:3000/@vite/client'
deb | [externalassethandler] loading 'http://localhost:3000/node_modules/vite/dist/client/env.mjs'
deb | [externalassethandler] loading 'http://localhost:3000/about'
deb | [externalassethandler] loading 'http://localhost:3000/@vite/client'
deb | [externalassethandler] loading 'http://localhost:3000/node_modules/vite/dist/client/env.mjs'
deb | [externalassethandler] loading 'http://localhost:3000/about'

Lorsque j'essaie d'obtenir la page en question pour la tester, comme décrit dans la documentation de Wails AssetServer, je récupère la page d'index :

let resp = await fetch("/about")
undefined
await resp.text()
'<!DOCTYPE html>\n<html lang="en">\n<head>\n  \x3Cscript type="module" src="/@vite/client">\x3C/script>\n\n    <meta charset="UTF-8"/>\n    <meta content="width=device-width, initial-scale=1.0" name="viewport"/>\n    <meta name="wails-options" content="noautoinject" />\n    \x3Cscript src="/wails/ipc.js">\x3C/script>\n    \x3Cscript src="/wails/runtime.js">\x3C/script>\n    <title>new</title>\n</head>\n<body>\n    <h1>Index!</h1>\n    <a href="/about">Go To About!</a>\n</body>\n</html>\n'

Pourquoi la fonction servehttp n'est-elle pas appelée ?

Solution

Le journal montre que le service externalassethandler。这意味着使用外部前端开发服务器。所有资源请求都会首先转发到外部前端开发服务器。仅当外部前端开发服务器响应 404405 状态代码时,才会使用 assetserver.options 中指定的处理程序。如今,大多数 spa 前端开发服务器都为非资产请求提供 index.html est utilisé. C'est pourquoi vous voyez ce comportement.

La solution de contournement consiste à configurer un serveur de développement frontal externe pour contourner la requête. Pour vite, modifiez le fichier de configuration et ajoutez le contenu suivant :

export default defineConfig({
  server: {
    proxy: {
      '/about': {
        bypass: function () {
          // Return false to produce a 404 error for the request.
          return false;
        },
      },
      // or for all the requests that start with "/api/"
      '/api/': {
        bypass: function () {
          return false;
        },
      },
    },
  },
});

Mais je recommande de ne pas faire ça. Parce que le gestionnaire d'actifs, comme son nom l'indique, fournit des services pour les actifs dynamiques. wails a sa propre façon d'appeler des méthodes de go liées. Tu devrais l'essayer.

Référence :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer