Ich versuche, einen benutzerdefinierten Multiplexer mit einem Wails-Asset-Handler zu verwenden, aber wenn ich versuche, etwas abzurufen, wird immer die Seite index.html angezeigt. Ich habe oben in der Funktion „servehttp“ des Muxers eine print-Anweisung eingefügt, diese wird jedoch nur einmal aufgerufen, wenn favicon.ico zu Beginn des Programms abgerufen wird.
Ich habe folgende Stammdatei:
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()) } }
Ich sehe im Terminal folgende Ausgabe:
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'
Wenn ich versuche, die betreffende Seite zum Testen abzurufen, wie in der Dokumentation zum Wails-Assetserver beschrieben, rufe ich die Indexseite ab:
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'
Warum wird die Funktion „servehttp“ nicht aufgerufen?
Das Protokoll zeigt, dass der externalassethandler
。这意味着使用外部前端开发服务器。所有资源请求都会首先转发到外部前端开发服务器。仅当外部前端开发服务器响应 404
或 405
状态代码时,才会使用 assetserver.options
中指定的处理程序。如今,大多数 spa 前端开发服务器都为非资产请求提供 index.html
-Dienst genutzt wird. Aus diesem Grund sehen Sie dieses Verhalten.
Die Problemumgehung besteht darin, einen externen Front-End-Entwicklungsserver zu konfigurieren, um die Anfrage zu umgehen. Ändern Sie für Vite die Konfigurationsdatei und fügen Sie den folgenden Inhalt hinzu:
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; }, }, }, }, });
Aber ich empfehle, dies nicht zu tun. Denn der Asset-Handler stellt, wie der Name schon sagt, Dienste für dynamische Assets bereit. Wails hat seine eigene Art, gebundene Go-Methoden aufzurufen. Du solltest es versuchen. Referenz:
frontend:dev:serverurl
位于 wails.json
server.proxy
errskipproxy
externer Assethandler
Das obige ist der detaillierte Inhalt vonProblem bei der Verwendung des Wails-Asset-Handlers mit benutzerdefiniertem Router. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!