解决方法:
- 在创建窗口的时候加上这个
webSecurity: false
, 但是官方不建议将 webSecurity 属性改为 false 。
所以这个方法不能用
// Create the browser window.
win = new BrowserWindow({
width: 900,
height: 620,
webPreferences: {
nodeIntegration: true
// webSecurity: false
},
frame: false,
...basicConfig
});
- 使用 nodejs 原生的 http 模块 - (推荐)
(1)引入http模块,自己手动封装, 太麻烦了,要求较高
const http = require('http');
import http from 'http';
export default function request(options, postData) {
return new Promise((resolve, reject) => {
const basicOptions = {
hostname: '127.0.0.1',
port: 5000,
headers: {
'Content-Type': 'application/json'
}
};
options.method = options.method ? options.method.toLocaleUpperCase() : 'GET';
const req = http.request({...basicOptions, ...options}, res => {
// console.log('res :', res);
console.log(`状态码: ${res.statusCode}`);
console.log(`响应头: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
let temp = '';
res.on('data', chunk => {
// console.log(`响应主体: ${chunk}`);
temp += chunk;
});
res.on('end', () => {
// console.log('响应中已无数据');
resolve({
data: JSON.parse(temp),
statusCode: res.statusCode,
headers: res.headers
});
});
});
req.on('error', e => {
console.error(`请求遇到问题: ${e.message}`);
reject(e.message);
});
if (options.method === 'POST') {
// 将数据写入请求主体。
req.write(JSON.stringify(postData));
}
req.end();
});
}
(2) axios 使用原生的 nodejs 的 http 模块 github issues -- 推荐
给axios添加以下代码
axios.defaults.adapter = require('axios/lib/adapters/http');
import axios from 'axios';
axios.defaults.baseURL = process.env.VUE_APP_BASE_URL;
axios.defaults.adapter = require('axios/lib/adapters/http');
// 请求拦截 设置统一header
axios.interceptors.request.use(
config => {
return config;
},
error => {
console.log(error);
return Promise.reject(error);
}
);
// 响应拦截 401 token过期处理
axios.interceptors.response.use(
response => {
console.log(response);
return response;
},
error => {
// 错误提醒
console.log(error);
return Promise.reject(error);
}
);
export default axios;
完,问题解决