我的 vue.config 文件中的代理有什么意义?
What is the point of proxy in my vue.config file?
我对 vue.config.js
中的 proxy '^/api'
的作用有点困惑。
当我从前端表单发出 axios 请求时,我知道它由我的 http-common.js
和 tutorial_data_services.js
文件处理。
我正在努力学习和理解这一点。谁能帮忙指教一下?
vue.config.js
const path = require('path');
module.exports = {
outputDir: path.resolve(__dirname, '../server/public'),
devServer:{
proxy:{
'^/api': {
target: 'http://localhost:8080',
changeOrigin: true,
secure:false,
pathRewrite: {'^/api': '/api'},
logLevel: 'debug'
}
}
}
}
http-common.js
import axios from 'axios'
export default axios.create({
baseURL: 'http://localhost:8080/',
headers: {
'Content-type': 'application/json'
}
})
tutorial_data_services.js
import http from '../http-common'
class TutorialDataService {
getAll() {
return http.get('/tutorials')
}
get(id) {
return http.get(`/tutorials/${id}`)
}
create(data) {
return http.post('/tutorials', data)
}
}
export default new TutorialDataService()
devServer 代理在路由之前检查每条路径并重定向任何匹配项。您示例中的规则是将任何请求代理到 /api
路径,包括它后面的任何字符串。因此,假设您的 Vue CLI devServer 在端口 8080 上是 运行,此规则将匹配您发送到 URLs 的任何请求,例如:
您在上面显示的 None 个请求被发送到 /api
路径,因此您的应用当前从未触发此规则。如果是,target
属性 指定要重定向到的路径,并且 devServer 还将匹配的部分附加到目标路径的末尾。 所以,上面的示例将重定向到:
目标+匹配部分。在这种情况下:没有任何重定向(实际上会导致重定向循环)。
您可以将请求发送到另一个 target
路径,并且您可以使用 pathRewrite
以任何您喜欢的方式重写该路径的一部分(或删除它)。在您的示例中, pathRewrite
也什么都不做,方法是将字符串 '/api'
重写为 '/api'
.
所以没有理由使用这个代理,你可以删除它。
代理的一个用途是让您将请求发送给亲属 URL,例如 '/api'
,既可以用于生产也可以用于开发。在生产环境中,当应用程序 运行 在同时托管 API 的服务器上时,该相对路径实际存在,因此应用程序正常运行。在开发中,如果 Vue CLI devServer 位于 8080,例如,Node 服务器位于 3000,则通过将那些相关的 URL 请求从 devServer 重定向到 Node,应用程序仍然可以正常工作。
这很好,因为那样你就不必为了让你的开发 API 请求正常工作而乱用 axios baseURL
或 .env
变量或绝对路径。
我对 vue.config.js
中的 proxy '^/api'
的作用有点困惑。
当我从前端表单发出 axios 请求时,我知道它由我的 http-common.js
和 tutorial_data_services.js
文件处理。
我正在努力学习和理解这一点。谁能帮忙指教一下?
vue.config.js
const path = require('path');
module.exports = {
outputDir: path.resolve(__dirname, '../server/public'),
devServer:{
proxy:{
'^/api': {
target: 'http://localhost:8080',
changeOrigin: true,
secure:false,
pathRewrite: {'^/api': '/api'},
logLevel: 'debug'
}
}
}
}
http-common.js
import axios from 'axios'
export default axios.create({
baseURL: 'http://localhost:8080/',
headers: {
'Content-type': 'application/json'
}
})
tutorial_data_services.js
import http from '../http-common'
class TutorialDataService {
getAll() {
return http.get('/tutorials')
}
get(id) {
return http.get(`/tutorials/${id}`)
}
create(data) {
return http.post('/tutorials', data)
}
}
export default new TutorialDataService()
devServer 代理在路由之前检查每条路径并重定向任何匹配项。您示例中的规则是将任何请求代理到 /api
路径,包括它后面的任何字符串。因此,假设您的 Vue CLI devServer 在端口 8080 上是 运行,此规则将匹配您发送到 URLs 的任何请求,例如:
None 个请求被发送到 /api
路径,因此您的应用当前从未触发此规则。如果是,target
属性 指定要重定向到的路径,并且 devServer 还将匹配的部分附加到目标路径的末尾。 所以,上面的示例将重定向到:
目标+匹配部分。在这种情况下:没有任何重定向(实际上会导致重定向循环)。
您可以将请求发送到另一个 target
路径,并且您可以使用 pathRewrite
以任何您喜欢的方式重写该路径的一部分(或删除它)。在您的示例中, pathRewrite
也什么都不做,方法是将字符串 '/api'
重写为 '/api'
.
所以没有理由使用这个代理,你可以删除它。
代理的一个用途是让您将请求发送给亲属 URL,例如 '/api'
,既可以用于生产也可以用于开发。在生产环境中,当应用程序 运行 在同时托管 API 的服务器上时,该相对路径实际存在,因此应用程序正常运行。在开发中,如果 Vue CLI devServer 位于 8080,例如,Node 服务器位于 3000,则通过将那些相关的 URL 请求从 devServer 重定向到 Node,应用程序仍然可以正常工作。
这很好,因为那样你就不必为了让你的开发 API 请求正常工作而乱用 axios baseURL
或 .env
变量或绝对路径。