electron直接使用axios請求,在生產(chǎn)環(huán)境,會報錯

解決方法:

  1. 在創(chuàng)建窗口的時候加上這個 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(`狀態(tài)碼: ${res.statusCode}`);
            console.log(`響應(yīng)頭: ${JSON.stringify(res.headers)}`);
            res.setEncoding('utf8');
            let temp = '';
            res.on('data', chunk => {
                // console.log(`響應(yīng)主體: ${chunk}`);
                temp += chunk;
            });
            res.on('end', () => {
                // console.log('響應(yīng)中已無數(shù)據(jù)');
                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') {
            // 將數(shù)據(jù)寫入請求主體。
            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');

// 請求攔截  設(shè)置統(tǒng)一header
axios.interceptors.request.use(
    config => {
        return config;
    },
    error => {
        console.log(error);
        return Promise.reject(error);
    }
);

// 響應(yīng)攔截  401 token過期處理
axios.interceptors.response.use(
    response => {
        console.log(response);
        return response;
    },
    error => {
        // 錯誤提醒
        console.log(error);
        return Promise.reject(error);
    }
);

export default axios;

完,問題解決

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容