5

我有休息服务:

http://localhost:3000/api/brands

当我从网络浏览器测试它时,它运行良好。

我在角度服务中使用它:

var motoAdsServices = angular.module('motoAdsServices', ['ngResource']);

motoAdsServices.factory('Brand', ['$resource', function($resource) {
    return $resource('http://localhost:3000/api/:id', {}, {
      query: {
        method: 'GET',
        params: {
          id: 'brands'
        },
        isArray: true
      }
    });
  }]);

调用时出现错误,因为在请求 URL 中我没有端口号:

Request URL: http://localhost/api/brands

为什么端口号被截断?角切呢?

Angular 文档中是这样写的:

参数化的 URL 模板,其参数以 : 为前缀,如 /user/:username。如果您使用带有端口号(例如http://example.com:8080/api)的 URL,它将受到尊重。

更新

我使用 Angular 1.0.8 版(感谢@KayakDave 的关注),但Angular 文档适用于 1.2 版。

4

3 回答 3

10

它有一个冒号,因此会被剥离,有点像 :id。如果你逃脱它,你应该没问题。试试http://localhost\:3000/api/:id吧。您可能会在路线或其他地方再次遇到这种情况。万一发生变化,这种行为会出现问题。

更新: http://localhost\\:3000/api/:id

于 2013-11-11T15:21:07.057 回答
2

因为角度截取 url 并将其:any视为您应该传递给它的参数。

破解此问题的一种简单方法是\:3000输入您的网址。

motoAdsServices.factory('Brand', ['$resource', function($resource) {
    return $resource('http://localhost:3000\:3000/api/:id', {}, {
        query: {
            method: 'GET',
            params: {
                id: 'brands'
            },
            isArray: true
        }
    });
}]);
于 2013-11-11T15:24:28.143 回答
0

资源插件问题的快速修复:

 var fixedTargetUrl = TARGET_URL.replace(/(:\d{4})/, "\\$1");
于 2014-09-26T06:06:41.003 回答