wails前端调用go端函数时返回404,端点配置没问题但就是找不到?
在用wails写桌面应用时遇到个怪问题,前端用vue调用go端函数一直报404,端点明明按文档配置了:
// go代码
func (a *App) GetConfig() (map[string]string, error) {
wails.Log.Info("调用了GetConfig")
return config, nil
}
前端这样调的:
// vue组件mounted钩子
window.wails.Events.On("frontend_ready", () => {
window.wails.Funcs.GetConfig().then(res => {
console.log(res)
})
})
启动时控制台直接报”POST http://localhost:34715/GetConfig net::ERR_CONNECTION_REFUSED”,但其他端点比如文件对话框功能正常工作过。是不是生命周期钩子挂载太早了?或者需要额外配置路由?搞不懂为啥只这个接口404…
Wails 默认不会自动把所有方法暴露给前端,需要确认两件事:
第一,你的 App 结构体有没有在 main 函数里正确绑定?必须用 wails.Bind() 注册才行。比如:
没 bind 的话,GetConfig 根本不会被暴露成 HTTP 端点,前端当然 404。
第二,前端调用不能只依赖 frontend_ready,这个事件只是页面加载完就发了,Funcs 对象可能还没初始化好。正确的做法是等 Wails 完全 ready 后再调用。建议加个延迟重试或者监听 domContentLoaded 后等一会儿:
另外检查下你的 Wails 版本,v1 和 v2 的 API 不一样,如果是 v2,函数路径是 /wails/rpc 而不是直接 POST 到方法名,你看到的 localhost:34715 直接打方法名,大概率是版本混淆了。
先确认 bind 了没有,再加个延时试试,八成是注册没生效导致的 404。
在 Wails 里,Go 端的函数必须在应用启动时正确注册到桥接层,否则前端调用不到。你现在的
GetConfig方法虽然定义了,但可能没有正确暴露给前端。检查下你的 Go 主文件(一般是 main.go),确保类似这样的代码存在:如果没有
BindFunctions这一步,前端是找不到这个方法的,就会报 404。另外,生命周期钩子挂载太早的可能性也有,但更常见的是函数没正确注册。试试加上这一步重新编译运行,应该就能解决问题了。如果还不行,再看看是否有跨域或者端口绑定的问题,不过从你的描述看应该不是这块儿。