我的前台将请求发送到后台服务器。如何拦截此请求,然后重定向回另一个请求?如何更改后退的URL?
const intercept = (urlmatch, callback) => {
let send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
this.addEventListener('readystatechange', function() {
if (this.responseURL.includes(urlmatch) && this.readyState === 4) {
callback(this);
}
}, false);
send.apply(this, arguments);
};
};
谢谢!
答案 0 :(得分:2)
这可以通过修补XMLHttpRequest
open
来轻松实现:
const intercept = (urlmatch, newurl) => {
const open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url, ...rest) {
url = url.replace(urlmatch, newurl);
return open.call(this, method, url, ...rest);
};
}
intercept('http:/example.com/', 'http:/my-example.com/');
为满足当地需求而修改全局变量是一种不良做法,可能会导致无法预料的后果。
除非目标是篡改其他人的应用程序(例如,使用用户脚本),否则更干净的方法是修改应用程序以使其可以更改基本url,例如来自
makeRequest('http:/example.com/api/...')
到
makeRequest(BASE_API_URL + '...')
BASE_API_URL
是应用程序常量,可以在应用程序初始化时使用环境变量,全局变量,依赖项注入等进行更改。
如果应用程序直接使用某种包装而不是XMLHttpRequest
,则基本URL功能可以在包装中实现。