2014-02-24 43 views
5

現在我正在編寫一個前端沒有後端ajax的前端。我使用angular-mocks來模擬這樣的API調用:使用angular-mocks for backendless匹配所有GET網址

$httpBackend.when('GET', '/somelink').respond(function(method, url, data) { 
    //do something 
}); 

但是,如果AJAX通過params: {id:12345},它會追加到URL是'/somelink?id=12345'。那不是趕上when('GET', '/somelink')

有沒有辦法使用正則表達式或一些技巧來解決這個問題?只是這樣,無論params裏面是什麼,respond()仍然被稱爲?

謝謝。

更新1:

我不能使用.whenGET因爲我backendless系統POSTPUT爲好。所以我需要保持它的通用性。這兩個參數.when('GET', '/somelink')實際上是我的代碼中的變量。

由於'/somelink'是另一個JSON中的變量,在JSON中具有RegEx /\/somelink/似乎不起作用。至少這是我現在看到的。

回答

8

是的,你可以使用這樣的正則表達式:

$httpBackend.whenGET(/\/somelink/).respond(function(method, url, data) { 
    //do something 
}); 

編輯

OK,你可以這樣做:

var method = 'GET'; 
var url = '/somelink'; 
$httpBackend.when(method, new RegExp('\\' + url)).respond(function(method, url, data) { 
    //do something 
}); 
+0

剛剛更新我的問題上面 –

+0

我喜歡簡單的解決方案 –

+1

偉大的作品。在'$ httpBackend.when(方法,新的RegExp('\\'+ url))響應...' –

3

URL可以是一個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" 
}); 

要創建一個字符串的URL模式,可選查詢字符串,你可以這樣做:

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" 
});