【问题标题】:Angular Resource PUT Operation with Payload带有有效负载的 Angular 资源 PUT 操作
【发布时间】:2016-07-12 10:20:29
【问题描述】:

我有以下工厂向服务器发送查询:

app.factory('Request', ['$resource',
    function ($resource) {
        var res = $resource("bin/server.fcgi/REST/" + ':resourceName/:ID', {}, {
                get : {
                    method : 'GET'
                },
                put : {
                    method : "PUT"
                }
            });
        return {
            get : function (arguments, b, c) {
                return res.get(arguments, b, c).$promise;
            },
            put : function(arguments,b,c){
                return res.put(arguments, b, c).$promise;
            }
        };
    }
]);

我这样称呼它:

Request[methodName](params).then(successFunction).catch (failFunction);

但是,如果我想发送 PUT 查询:

Request["put"](params).then(successFunction).catch (failFunction);

在哪里

params = {
   resourceName : "ATable",
   ID : 222,
   AProperty : "changedValue"
}

然后我接受以下请求:(所以一个错误)

http://myadres.com/REST/ATable/222?AProperty=changedValue

而不是

http://myadres.com/REST/ATable/222

有负载

{ AProperty:changedValue }

这有什么问题?

【问题讨论】:

  • 看看那个问题stackoverflow.com/questions/38308156/… 我在那里发表评论,你也应该这样做——你不需要“+”
  • 你到底是什么意思?我尝试了您的答案的某些版本,但没有一个有效。如果你能给出答案,那么我们可以就你的答案进行讨论。
  • 显示你做了什么尝试
  • var res = $resource("bin/server.fcgi/REST/" + ':resourceName/:ID', {ID: 'ID'}, { put : { method : "PUT", params: { ID: "ID" } } });

标签: angularjs rest put angular-resource payload


【解决方案1】:
app.service('Request', ['$resource',function ($resource) {
        var res = $resource('bin/server.fcgi/REST/:resourceName/:ID', 
            {resourceName: "@resourceName", ID: "@ID"}, 
            {
                get : { method : 'GET'},
                put : { method : "PUT", params: {resourceName:"@resourceName", ID: "@ID"}//you can leave the string empty if you dont want it to be a defualt value like ID:""
            });

        this.get = function () {
            return res.get().$promise;
        }
        this.put = function(obj){
            return res.put(obj).$promise; // it can be also {like json with your params}
        }
]);

然后通过

从控制器调用它
var obj = {
    ID:222,
    resourceName:'ATable'
}
Request.put(obj).then(function(data){
    //check whats the data
})

这是应该的 也许不是最好的方法,但应该可行

【讨论】:

  • 现在我采取以下措施:http://localhost/agenda/bin/server.fcgi/REST/:@resourceName/26 很奇怪
  • 名称必须相等,如果为空则可以
  • 名字resourceName在任何地方都相等?
  • 是的,它应该是,但正如你所看到的那样,你只是错过了一些东西
  • 是的,查询现在正在使用以下内容:$resource("bin/server.fcgi/REST/" + ':resourceName/:ID', {resourceName:"@resourceName", ID: '@ID'}, { put : { method : "PUT", params: { ID: '@ID', resourceName:"@resourceName" } } }); 但是resourceName 也包含在有效负载中,它不应该转到服务器。所以现在从服务器获取这个错误:Unknown property: "resourceName" 我们如何避免资源名称没有作为属性发送到服务器??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 2021-06-28
  • 2018-09-17
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多