/** * 在 ajax request 前修改url,增加服务端`basePath` * `basePath`在`app.json`配置 */ Ext.define('saas.override.data.Connection', { override: 'Ext.data.Connection', urlRegexp: /(http|ftp|https):\/\//, config: { /** * @cfg {Object} defaultServerHeaders * 与defaultHeaders有区别,只在调用server api的时候才添加的headers */ defaultServerHeaders: null }, privates: { parseBasePath: function(basePath) { if (Ext.isObject(basePath)) { var protocol = window.location.protocol.split(":")[0]; if (protocol === 'file') { protocol = 'https'; } return basePath[protocol]; } return basePath; }, setupServerOptions: function(options) { var serverOptions = Ext.manifest.server, originUrl = options.url; if (serverOptions && serverOptions.basePath && !this.urlRegexp.test(originUrl) && (!serverOptions.urlPattern || new RegExp(serverOptions.urlPattern).test(originUrl))) { Ext.Object.merge(options, { url: this.parseBasePath(serverOptions.basePath) + (originUrl.indexOf('/') == 0 ? '' : '/') + originUrl, headers: this.getDefaultServerHeaders() || {} }); } } }, request: function(options) { if (options && options.url) { this.setupServerOptions(options); } return this.callParent([options]); }, onRequestComplete: function(request) { let headers = request.result.getAllResponseHeaders() || {}, Authorization = headers['authorization'], result = request.result, res; try{ res = JSON.parse(result.responseText); }catch(e) { res = result.responseJson // console.error(e); } if(res && res.code == 40001) { // 如果token超时则显示重新登陆弹窗 saas.util.BaseUtil.showLoginWin(); throw new Error('会话已过期'); } if(Authorization) { // 如果返回了token则刷新token let headers = Ext.Ajax.getDefaultHeaders() || {}; let session = saas.util.State.get('session'); headers['Authorization'] = Authorization; Ext.Ajax.setDefaultHeaders(headers); session.token = Authorization; session.timestamp = Ext.now(); saas.util.State.set('session', session); let sessionStr = session ? JSON.stringify(session) : ''; if (typeof require === 'function') { let ipc = require('electron').ipcRenderer; ipc.send('session.change', sessionStr); }else { //解析session 把data作为sessionStr sessionStr = session ? JSON.stringify(session.data) : ''; const frame = window.frames[window.frames.length - 1]; frame.postMessage(sessionStr, '*'); } } }, });