Maison > Article > développement back-end > Problème lors de l'utilisation du gestionnaire d'actifs Wails avec un routeur personnalisé
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 ?
Le journal montre que le service externalassethandler
。这意味着使用外部前端开发服务器。所有资源请求都会首先转发到外部前端开发服务器。仅当外部前端开发服务器响应 404
或 405
状态代码时,才会使用 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 :
frontend:dev:serverurl
位于 wails.json
server.proxy
errskipproxy
externalassehandler
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!