美文网首页
electron直接使用axios请求,在生产环境,会报错

electron直接使用axios请求,在生产环境,会报错

作者: 程序员李钟意 | 来源:发表于2019-12-24 17:43 被阅读0次

    解决方法:

    1. 在创建窗口的时候加上这个 webSecurity: false, 但是官方不建议将 webSecurity 属性改为 false 。
      所以这个方法不能用
    // Create the browser window.
    win = new BrowserWindow({
        width: 900,
        height: 620,
        webPreferences: {
            nodeIntegration: true
            // webSecurity: false
        },
        frame: false,
        ...basicConfig
    });
    
    1. 使用 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;
    

    完,问题解决

    相关文章

      网友评论

          本文标题:electron直接使用axios请求,在生产环境,会报错

          本文链接:https://www.haomeiwen.com/subject/foufoctx.html