使用electron, 将项目打包成离线应用。使用file协议,在本地读取静态资源。但是ajax请求如果用相对路径,打包之后,会直接找到根目录。

 // main.js
 const winURL = process.env.NODE_ENV === 'development'
  ? `http://localhost:8080`
  : `file://${__dirname}/index.html`
  mainWindow.loadURL(winURL)

 // api.js 
  export function loginByUsername(username, password) {
  const data = {
    username,
    password
  }
  return request({
    url: '/ntwechat/login/login',
    method: 'get',
    params: {
      name: username,
      password: password
    }
  })
}

此时network的request url 为 file:///D:/ntwechat/login/login?name=nt&password
需要给ajax提供完整的url路径, 如 http: www.xxx.com/ntwechat/login/login,
但是这样的工作量太大了, 我想知道 electron 有没有拦截url的东西。
通过查找 发现了 electron 的 session 模块

const {session} = require('electron')
session.defaultSession.webRequest.onBeforeRequest(filter, (details, callback) => {
   
    details.url = details.url.replace(/.*\/ntwechat\//ig, 'http://localhost:8080/ntwechat/')

    callback({cancel: false, url: details.url});
  })

但是我还是没办法改变 请求的 request url

请问有什么办法, 能简便的解决这个问题吗


···回复:

改router-> mode:’hash’,你试试看,我是这样解决的。


···回复:

可以使用ajaxsetup进行路径替换

$.ajaxSetup({
  beforeSend: function(jqXHR, settings) {
    settings.url = window.AJAXURL + settings.url.replace(/^\//, '');
  },
})

window.AJAXURL就是你的真实请求地址.

Scroll Up