【发布时间】:2021-12-11 14:34:52
【问题描述】:
我使用 Vue.js(用于前端)开发了一个网站,并制作了一个服务器来将该网站连接到一个 API(这里是 Twitter)。服务器是用 Express.js 制作的。在 localhost 中,一切正常。我的服务器在 localhost:8085 上运行,我的网站在 localhost:8080 上。借助 Api,我可以通过例如 GET http://localhost:8085/TheNameOfTheApiFunction 访问数据。
因为我想轻松部署我的网站,所以我尝试使用 Heroku 和 Firebase。我用前端做“npm run build”,把结果放在我服务器的“public”目录下,firebase.json 很好(我认为)。
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"function":"app",
"destination": "/index.html"
}
]
},
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
]
}
}
此时,当我启动网站时,前端正在工作,但无法访问任何 API 功能。似乎合乎逻辑,因为没有 localhost/8085 要求函数。
GET http://localhost:8085/NameOfTheApiFunction net::ERR_CONNECTION_REFUSED
因此,我决定探究原因,发现我应该使用本教程中的建议: https://firebase.google.com/docs/hosting/functions#use_a_web_framework。 因此,我将 app.js 文件中的内容复制并粘贴到了由 firebase 函数创建的 index.js 文件中(在函数目录中)。但它不起作用。
我应该怎么做才能进行良好的部署?我应该更改 API.js 中客户端的内容以使其具有适应性吗?
export default () => {
return axios.create({
baseURL: `http://localhost:8085/`
})
}
编辑 说清楚。
-
在文件夹“myapp”中,我有文件夹“client”,其中有我的 Vue.js 前端网站,我使用
npm run serve在本地启动它。 -
在同一文件夹“myapp”中,我有文件夹“server”,这是连接到 Twitter Api 所必需的,因为从前端无法实现。我通过执行“npm run start”来启动它。
-
我的前端使用 Axios 访问“服务器”。具有 get 或 post 的服务器 anwser 并能够向 twitter API 询问信息。
-
在 localhost 上一切正常。我想部署网站,我跟着这个视频: https://www.youtube.com/watch?v=GJwHevf2wYE 这家伙建议在服务器部分创建一个名为“public”的文件夹,您将所有来自“客户端”的构建(npm run build)的文件放在其中。您在服务器中添加
app.use(express.static("public")),当我启动时,例如,localhost:8085(即服务器),我可以通过一个命令(而不是两个)访问整个网站。 -
因为这行得通,我认为我可以通过部署“服务器”文件夹来启动该网站。但它不起作用,我认为这是因为“客户端”端被编码为请求“localhost:8085/ApiFunctions”。但我不明白我应该如何部署服务器。这就是我尝试使用firebase托管的原因,但我遇到了完全相同的问题:我不完全了解它是如何运行的,以知道问题是来自我的部署方法还是代码(axios 具有baseURL:localhost:8085)。
【问题讨论】:
-
如果您从 Express 应用程序为 Vue 应用程序提供服务,它可以发出 relative 请求。然后你根本不需要配置,当你在本地运行它时只需要一个开发代理。例如,看看我是如何设置它的 here。
-
@jonrsharpe 我已经阅读了该页面。这是我尝试用于 Heroku 的架构,但就像我说的,我不明白我应该在 Axios 的 BaseURL 中放置什么以获得相对路径!你能解释一下吗?
-
没什么,如果您使用的是相对路径,则不需要基本 URL。
-
我应该如何使用相对路径?而且,也许我不明白你所说的相对路径是什么意思
-
axios.method('/NameOfTheApiFunction')。基本上,您 with 配置了基本 URL,除非没有基本 URL。然后将它们设为 相对于 页面加载的任何来源,因为 Express 服务器同时提供 API,和客户端应用程序资产与您相同' d 无论如何都要输入基本 URL。
标签: javascript firebase express axios google-cloud-functions