Прокси-конфигурация веб-пакета
В реальных проектах неизбежно возникнут проблемы кроссовера.Прокси в webpack — один из способов решения кроссдоменности фронтенда. По проблеме:протокол,доменное имя,портПока один из трех несовместим с сервером, будет сообщено о междоменной ошибке.
// webpack.config.js
devServer: {
hot:true, // 它是热更新:只更新改变的组件或者模块,不会整体刷新页面
open: true, // 是否自动打开浏览器
proxy: { // 配置代理(只在本地开发有效,上线无效)
"/x": { // 这是请求接口中要替换的标识
target: "https://api.bilibili.com", // 被替换的目标地址,即把 /api 替换成这个
pathRewrite: {"^/api" : ""},
secure: false, // 若代理的地址是https协议,需要配置这个属性
},
'/api': {
target: 'http://localhost:3000', // 这是本地用node写的一个服务,用webpack-dev-server起的服务默认端口是8080
pathRewrite: {"/api" : ""}, // 后台在转接的时候url中是没有 /api 的
changeOrigin: true, // 加了这个属性,那后端收到的请求头中的host是目标地址 target
},
}
}
// 请求接口文件
// 会报跨域的错,因为本地的是 http://localhost:8080/
fetch('/x/web-interface/nav').then(res=>res.json).then(data => {
console.log(data)
});
let xhr = new XMLHttpRequest();
xhr.open('get','/api/user',true)
xhr.onreadystatechange = function(){
if(xhr.readyState === 4) {
console.log(xhr);
console.log(xhr.response)
}
}
xhr.send(null);
Мок-интерфейс (не заходить через прокси, напрямую запрашивать локальный сервис)
Вместо прохождения через прокси вы можете имитировать интерфейс и возвращать данные локально.devServer.beforeИспользуйте фиктивный интерфейс, не делайте прокси
devServer: {
hot:true, // 它是热更新:只更新改变的组件或者模块,不会整体刷新页面
open: true, // 是否自动打开浏览器
// 直接自己造数据,不访问后端接口
before: function(app){
// 接口 /api/user
app.get('/api/user', function(req, res) {
// 请求成功返回数据
res.json({app: 'app', name: 'before'})
});
// 接口 core
app.get('/api/core', function(req, res) {
// 请求成功返回数据
res.json({name: '这是第二个接口'})
});
}
}
// 接口请求文件
let xhr = new XMLHttpRequest();
xhr.open('get','/api/user',true)
xhr.onreadystatechange = function(){
if(xhr.readyState === 4) {
console.log(xhr);
console.log(xhr.response)
}
}
xhr.send(null);
fetch('/api/core').then(res=>res.json).then(data => {
console.log(data)
});