当角度应用程序呼叫休息服务时,为什么端口号被切断

时间:2013-11-11 15:12:32

标签: rest angularjs

我有休息服务:

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

当它被调用时我有错误,因为在reqest URL中我没有端口号:

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

为什么端口数字被削减?角度削减了吗?

Angular doc写道:

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

更新

我使用角度版本1.0.8(感谢@KayakDave引起你的注意)但Angular doc适用于版本1.2。

3 个答案:

答案 0 :(得分:10)

它有一个冒号,因此被剥离,有点像:id。如果你逃避它,你应该没问题。请尝试使用http://localhost\:3000/api/:id。您可能会在路线或其他地方再次遇到此问题。 如果发生变化,有an issue关于此行为。

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

答案 1 :(得分:2)

因为角度拦截了网址并将:any视为您应该传递给它的参数。

一种简单的方法就是将\:3000放入您的网址。

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

答案 2 :(得分:0)

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

 var fixedTargetUrl = TARGET_URL.replace(/(:\d{4})/, "\\$1");