即使响应为 200(成功)也会调用 Axios Catch

Zac*_* C. 8 vue.js electron axios babel-polyfill

我正在使用带有 Axios的Electron Vue应用程序来调用我的 Laravel 服务器。在 Electron 的开发模式下,一切都很完美。但是,一旦我将 Electron 应用程序构建为安装程序并将其放在客户端计算机上,所有混乱就爆发了。我解决了一些问题,但这一个问题会杀了我。

简单地说,即使所有 Axios 都成功返回,它们也会抛出一个我在 .catch() 中放入的错误。老实说,我很困惑这怎么可能。例如,当我的程序加载时,它会进行一些调用以获取所需的信息。抛出错误并显示警报。我想这只是我的 Laravel 服务器。但是数据被成功抓取并添加到应用程序中。

axios.post(`${this.$store.state.URL}/get_server_ticket_from_table?api=${this.$store.state.API}`, {
    id: this.ServerTicketMove.Server1.id,
    table: this.ServerTicketMove.currentTable
})
.then((response) => {
    console.log(response)

    if (typeof response.data.id != 'undefined') {
        this.ServerTicketMove.ticket = response.data

    }

})
.catch(() => {
    alert('Did not get Servers Table Information. Cant Connect to Main Server.')
}) 
Run Code Online (Sandbox Code Playgroud)

我做了一些谷歌搜索,看到了一些关于 CORS 的帖子。所以我在我的 Web 服务器和 Laravel 上完成并启用了它。这造成了更大的混乱。同样的错误,但这次没有数据应用于任何东西。所以 .then() 甚至没有被调用。最重要的是,在启用 CORS 的情况下,我的 Axios 似乎正在使用 OPTIONS 的请求方法进行额外的 HTTP 调用。为什么?我不认为 CORS 是我问题的答案。

同样在我的 Electron Vue background.js 中,我重新开启了网络安全。这是因为发展。这没有改变任何东西。

win = new BrowserWindow({
    width: 275,
    height: 640,
    title: 'title',
    // webPreferences: { webSecurity: false }
})
Run Code Online (Sandbox Code Playgroud)

有谁知道发生了什么?

编辑 - 1-14-2019

在发现错误“未定义 regeneratorRuntime”后,我认为这是一个 Babel 问题。我已经按照https://babeljs.io/docs/en/babel-polyfill/进行了所有操作,但仍然得到“未定义 regeneratorRuntime”。Babel + Axios + Electron + Await/Sync 一起工作没有任何错误吗?我个人不希望忽略“未定义 regeneratorRuntime”,并尽可能为这个问题找到一个可靠的解决方案。任何输入或我研究的东西将不胜感激!

Ily*_*eev 13

当您的响应有错误时会发生此问题,例如,当响应正确但在 then 响应中您做了一些抛出错误的事情,axios 然后捕获该错误,即使来自服务器的响应是成功的


Zac*_* C. 1

经过多次谷歌搜索后,我发现我只是缺少 package.json 中的依赖项。尽管它们在 node_modules 文件夹中是必需的,但它们并未在我的程序中列为依赖项。

正在开发 Electron + Vue + Axios + Sync/Await 的生产版本

npm install --save @babel/runtime 
npm install --save-dev @babel/plugin-transform-runtime
Run Code Online (Sandbox Code Playgroud)

并且,在 .babelrc 中添加:

{
    "presets": ["@babel/preset-env"],
    "plugins": [
        ["@babel/transform-runtime"]
    ]
}
Run Code Online (Sandbox Code Playgroud)

从这里的答案中得到了这个代码