5

我现在正在编写一个没有后端 ajax 的前端。我angular-mocks用来模拟这样的 API 调用:

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

但是,如果 ajax 通过params: {id:12345},它将附加到 url 为'/somelink?id=12345'. 这不会when('GET', '/somelink')

有没有办法使用 RegEx 或一些技巧来解决这个问题?只是为了不管里面是什么paramsrespond()仍然被调用?

谢谢。

更新 1:

我不能使用.whenGET,因为我的后端系统也POSTPUT。所以我需要保持通用。这两个参数.when('GET', '/somelink')实际上是我的代码中的变量。

由于'/somelink'is a variable in another JSON,因此在 JSON 中使用 RegEx/\/somelink/似乎不起作用。至少这是我现在看到的。

4

2 回答 2

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
});
于 2014-02-24T09:27:31.950 回答
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"
});
于 2014-02-24T09:30:26.117 回答