Подтвердить что ты не робот

URL-адрес AngularJS - $для URL-адреса Get и Post

Ресурс

$awesome обеспечивает очень удобный способ обработки веб-сервисов. Что делать, если GET и POST должны выполняться по разным URL-адресам?

Например, URL-адрес GET http://localhost/pleaseGethere/:id и URL-адрес POST http://localhost/pleasePosthere без каких-либо параметров

4b9b3361

Ответ 1

Вы должны указать URL-адрес в качестве параметра. Я смог это сделать:

$provide.factory('twitterResource', [
    '$resource',
    function($resource) {
        return $resource(
            'https://:url/:action',
            {
                url: 'search.twitter.com',
                action: 'search.json',
                q: '#ThingsYouSayToYourBestFriend',
                callback: 'JSON_CALLBACK'
            },
            {
                get: {
                    method: 'JSONP'
                }
            }
        );
    }
]);

Затем вы можете перезаписать URL-адрес своего вызова GET.

Единственное предостережение, которое я обнаружил во время моего ДЕЙСТВИТЕЛЬНО короткого тестирования, состояло в том, что если бы я включил http:// в строку URL, это не сработало. Я не получил сообщение об ошибке. Он просто ничего не сделал.

Ответ 2

Используйте свойство "url" для [actions], чтобы переопределить URL-адрес по умолчанию.

$resource(url, [paramDefaults], [actions], options);

например:

$resource('http://localhost/pleaseGethere/:id',{},{
    getMethod:{
        method:'GET',
        isArray:true
    }
    postMethod:{
        url:'http://localhost/pleasePosthere',
        method:'POST',
        isArray:false
    }
}

Использование ресурса Angular $: http://docs.angularjs.org/api/ngResource/service/$resource

Ответ 3

Если вы добавите хэш с именами параметров в вызов $resource:

$resource('localhost/pleaseGethere/:id', {id: '@id'});

Затем идентификатор: id будет отображаться в id при вызове функции (это вызовет GET localhost/pleaseGethere/123):

Resource.get({id: 123});

Для POST вы просто не назначаете id param:

Resource.post({}, {name: "Joe"});

Будет вызван правильный URL-адрес, который в этом случае будет POST localhost/pleaseGethere (конечная косая черта лишена ngResource).

Подробнее см. http://docs.angularjs.org/api/ngResource.$resource → Примеры → Ресурс кредитной карты.

Ответ 4

В дополнение к ответу Ирис Вонг я хотел привести пример наличия нескольких параметров с несколькими методами и действиями:

angular
  .module('thingApp')
  .factory('ThingResource', ['$resource', '$state',  returnThing]);

И ресурс:

function returnThing($resource, $state) {
  var mainUrl = '/api/stuffs/:stuffId/thing'
  var params = {stuffId: '@_id', thingMongoId: '@_id', thingNumber: '@_id'}
  return $resource(mainUrl, params, {
    'save': {
      url: '/api/stuffs/:stuffId/thing/:thingMongoId',
      method: 'POST',
      interceptor: {
        responseError: function(e) {
          console.warn('Problem making request to backend: ', e)
          $state.go('oops')
        }
      }
    },
    'get': {
      url: '/api/stuffs/:stuffId/thing/:thingMongoId',
      method: 'GET',
      interceptor: {
        responseError: function(e) {
          console.warn('Problem making request to backend: ', e)
          $state.go('oops')
        }
      }
    },
    'assignThing':{
      method: 'POST',
      url: '/api/stuffs/:stuffId/thing/assign/:thingNumber'
    }
  });
}

Что дает 3 отдельных метода:

// POST to http://currnt_base_url/api/stuffs/:stuffId/thing/:thingMongoId
ThingResource.save({
    stuffId:'56c3d1c47fe68be29e0f7652', 
    thingMongoId: '56c3d1c47fe6agwbe29e0f11111'})

// GET to current http://currnt_base_url/api/stuffs/:stuffId/thing/:thingMongoId
ThingResource.get({
    stuffId:'56c3d1c47fe68be29e0f7652', 
    thingMongoId: '56c3d1c47fe6agwbe29e0f11111'})

// POST to http://currnt_base_url/api/stuffs/:stuffId/thing/assign/:thingNumber
ThingResource.assignThing({
    stuffId:'56c3d1c47fe68be29e0f7652', 
    thingNumber: '999998'})

Ответ 5

Следуйте следующим образом:

(function () {
    'use strict';

    angular
        .module("app")
        .factory("SomeFactory", SomeFactory);

    function SomeFactory($resource) {
        var provider = "http://stackoverflow.com/:action/:id";
        var params = {"id":"@id"};
        var actions = {
            "create":   {"method": "POST",  "params": {"action": "CreateAwesomePost"}},
            "read":     {"method": "POST",  "params": {"action": "ReadSomethingInteresting"}},
            "update":   {"method": "POST",  "params": {"action": "UpdateSomePost"}},
            "delete":   {"method": "GET",   "params": {"action": "DeleteJustForFun"}}
        };

        return $resource(provider, params, actions);
    }
})();

Я надеюсь, что это поможет! Наслаждайтесь!