我现在正在写一个没有后端ajax的前端。我正在使用angular-mocks
来模拟API调用:
$httpBackend.when('GET', '/somelink').respond(function(method, url, data) {
//do something
});
但是,如果ajax通过params: {id:12345}
,则会将其附加到网址'/somelink?id=12345'
。 when('GET', '/somelink')
有没有办法使用RegEx或一些技巧来解决这个问题?这样,无论params
内部是什么,respond()
仍会被调用?
感谢。
更新1:
我无法使用.whenGET
,因为我的后端系统也有POST
和PUT
。所以我需要保持它的通用性。这两个参数.when('GET', '/somelink')
实际上是我代码中的变量。
由于'/somelink'
是另一个JSON
中的变量,因此在JSON中使用RegEx /\/somelink/
似乎不起作用。至少那是我现在看到的。
答案 0 :(得分:8)
是的,您可以使用这样的正则表达式:
$httpBackend.whenGET(/\/somelink/).respond(function(method, url, data) {
//do something
});
修改强>
好的,你可以这样做:
var method = 'GET';
var url = '/somelink';
$httpBackend.when(method, new RegExp('\\' + url)).respond(function(method, url, data) {
//do something
});
答案 1 :(得分:3)
网址可以是RegExp
对象,也可以是具有方法test
的任何对象。
要匹配查询参数,您可以使用以下内容:
var somelinkPattern = /^\/somelink(?:\?(.*))?$/;
$httpBackend.when('GET', somelinkPattern).respond(function(method, url, data) {
var query = somelinkPattern.exec(url)[1];
// url = "/somelink?abc=123" -> query = "abc=123"
});
要使用可选的查询字符串从字符串网址创建模式,您可以使用:
var targetUrl = "/somelink";
var pattern = new RegExp(
"^" +
targetUrl.replace(/[-[\]{}()*+?.\\^$|]/g, "\\$&") + /* escape special chars */
"(?:\\?.*)?$");
$httpBackend.when('GET', pattern).respond(function(method, url, data) {
var queryMatch = /^[^#]*\?([^#]*)/.exec(url);
var query = queryMatch ? queryMatch[1] : "";
// url = "/somelink?abc=123" -> query = "abc=123"
});