vue项目接口200通过,但接口控制台报错
/**
* 表示一次http请求的结果
*/
export class Result {
success() {
return this.code === 200;
}
message(){
return this.msg
}
code(){
return this.code
}
data(){
return this.data
}
}
function convertResult(resp) {
console.log(resp);
return resp.json().then(result => {
console.log(result);
return Object.assign(new Result(),result);
});
}
/**
* 发送一次get方法请求
* @param url 请求地址
* @param params 请求参数对象 会被解析后填充成?a=b的格式
*/
export const doGet = (url, params) => {
const param = new URLSearchParams();
for (let k in params) {
param.append(k, params[k]);
}
return fetch(url + '?' + param.toString()).then(t => convertResult(t));
};
/**
* 发送一次get方法请求
* @param url 请求地址
*/
export const doGetDirect = (url) => {
return fetch(url).then(t => convertResult(t));
};
/**
* 发送一次post方法请求,请求参数对象会被以x-www-form-urlencoded格式编码放入body中
* @param url 请求地址
* @param params 参数对象
*/
export const doPostUrlEncoding = (url, params) => {
console.log("已发送!");
const param = new URLSearchParams();
for (let k in params) {
param.append(k, params[k]);
}
return fetch(url, {
method: "POST",
body: param
}).then(t => convertResult(t));
};
/**
* 发送一次post方法请求,请求参数对象会被以form-data格式编码放入body中
* @param url 请求地址
* @param params 参数对象
*/
export const doPostFormData = (url, params) => {
const param = new FormData();
for (let k in params) {
param.append(k, params[k]);
}
console.log(param);
console.log(params);
return fetch(url, {
method: "POST",
// mode: 'no-cors',
body: param,
}).then(t => convertResult(t));
};
/**
* 发送一次post方法请求,请求参数对象会被以json字符串编码放入body中
* @param url 请求地址
* @param params 参数对象
*/
export const doPostJson = (url, params) => {
return fetch(url, {
method: "POST",
body: JSON.stringify(params),
params: params,
headers: {
'Content-Type': 'application/json'
}
}).then(t => convertResult(t));
};
//# sourceMappingURL=generic.js.map
[](
login() {
doPostFormData("http://localhost:8071/user/login", this.loginForm).then((res) => {
console.log(res);
if (res.code == 200) {
// setToken('token', res.data)
this.$message({ message: '登录成功', type: 'success' })
this.$router.push('/index')
// Cookies.set('username', this.loginForm.username)
} else {
this.$message.error('登录失败,请检查账号密码是否正确!')
}
})
},
```)
```javascript
module.exports = {
devServer: {
headers: {
'Access-Control-Allow-Origin': '*', // 允许所有域名的脚本访问该资源
},
proxy: {
"/api": {
// target: process.env.TARGET,
target: 'http://localhost:8071',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
},
}
尝试在代理服务器配置是添加
headers: {
'Access-Control-Allow-Origin': '*', // 允许所有域名的脚本访问该资源
},
也在接口封装处使用过mode:“no-cors”
想要解决此报错
这个问题我来回答你,若有帮助,还望采纳,点击回答右侧采纳即可。
这貌似就是跨域导致的报错,我给你提供两种思路吧。
解决办法1:
把访问后台的地址,localhost改成对应的本机ip。
解决办法2:
后端服务也可以处理下跨域请求,配置跨域策略即可,比如在接口Controller请求上添加@CrossOrigin 注解等。@CrossOrigin可以处理跨域请求,让你能访问不是一个域的文件。同域是指协议、ip地址、端口三者全部相同的情况。
望采纳。。。。。。
方法一:临时解决方案
Windows : Windows + R
chrome --disable-web-security --user-data-dir
MacOS:
open -na Google\ Chrome --args --user-data-dir=/tmp/temporary-chrome-profile-dir --disable-web-security --disable-site-isolation-trials
添加chrome扩展程序: https://chrome.google.com/webstore/detail/moesif-orign-cors-changer/digfbfaphojjndkpccljibejjbppifbc/related?hl=en-GB
方法二:尝试一下你可以试试:
module.exports = {
devServer: {
headers: {
'Access-Control-Allow-Origin': '*', // 允许所有域名的脚本访问该资源
'Access-Control-Allow-Methods': 'OPTIONS, DELETE, POST, GET, PATCH, PUT',
'Access-Control-Max-Age': '3600',
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Headers': 'Content-Type'
},
proxy: {
"/api": {
// target: process.env.TARGET,
target: 'http://localhost:8071',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
}
},
}
通常调用接口的时候,直接调/api/user/login,不用加上前面的路径,因为你已经配置了跨域
logIn
函数里面不需要协商前面的主机名,这会导致跨域问题/api
重写条目,所以解决方法是login里面的内容改为doPostFormData("/api/user/login", this.loginForm)
你的报错问题是跨域问题。
解决方案:跨域问题 ,一般都是后端进行处理,可以让后端程序设置CORS允许跨域访问。
这个要么你前端服务端口和改为和后端一致的,要么后端添加允许跨域
比如这样,在响应头里添加这些
response.setHeader("Access-Control-Allow-Origin", originHeader);
response.setContentType("application/json;charset=UTF-8");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token");
// 如果要把Cookie发到服务器,需要指定Access-Control-Allow-Credentials字段为true
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Expose-Headers", "*");
1.问题原因是跨域导致的
2.你试图解决跨域添加了devServer的配置,方向是对的,但是没有生效,你的配置的含义是以api打头的url需要代理到8071端口,但是你请求的url不是api打头
3.解决方案,去掉localhost:8071添加api
http://localhost:8071/user/login
修改为
/api/user/login
望采纳!!!点击回答右侧采纳即可!
应该是CROS没有配置好
跨域了,在vue.config.js
中其实是用/api反向代理为http://localhost:8071/
,所以你只要把请求地址改为/api/user/login
即可
望采纳!!!点击回答右侧采纳即可!
这个问题可能是由于服务端返回的数据格式不符合预期造成的。在代码中,使用了fetch API来发起请求,fetch API返回的是一个Promise对象,在使用.json()方法将其转换为json格式后使用Object.assign方法将其与Result类进行合并。
我建议检查服务端返回的数据是否符合预期,包括数据格式和字段名是否正确。如果数据格式正确,可以在convertResult函数中添加一些console.log语句来调试结果数据的具体情况。