美文网首页
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