Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法使用id在服务器上进行更新_Node.js_Backbone.js - Fatal编程技术网

Node.js 无法使用id在服务器上进行更新

Node.js 无法使用id在服务器上进行更新,node.js,backbone.js,Node.js,Backbone.js,我正在更新表单,我想在服务器上用id发出更新请求 我的模型是: var CampaignEditModel = Backbone.Model.extend({ urlRoot:"http://localhost:3033/campaign/update/", url : function(){ var url = this.urlRoot + this.id; return url; }, idAttribute: "_id"

我正在更新表单,我想在服务器上用id发出更新请求 我的模型是:

    var CampaignEditModel = Backbone.Model.extend({
    urlRoot:"http://localhost:3033/campaign/update/",
    url : function(){
       var url = this.urlRoot + this.id;
        return url;
    },
    idAttribute: "_id",
    defaults:{
        "id":null ,
        "Name" :""            
    }
});
此处调用渲染函数:

  $contents.empty().append(new EditView({model:editCampaigns}).render({id:id}).el);
渲染功能是:

render: function(options){
        this.$el.append( _.template(EditTemplate));
        this.model.set({"id":options.id})
        console.log(this.model.get("id"));
        this._modelBinder.bind(this.model, this.el);
        return this;
    },
    events: {
        'click .saveCampaign ': 'save'

    },
    save:function(){
        this.model.set({
            "Name" :$('#edname').val(),
        });
        this.model.save(null, {success: function(data){
            console.log("data:" + data);
            require(['campaignroute'],function(routes){
                var router = routes.pageRouter;
                router.navigate('gridView', {trigger: true});
            });
        }});
        return false;
    }
问题是,当调用save方法时,我甚至还在模型中设置了一个id 请求是这样的

http://localhost:3033/campaign/update/undefined
控制台显示eror:

Failed to load resource: the server responded with a status of 404 (Not Found)

如何解决这个问题

在输入
渲染(选项)
之前,不要将
选项
传递给自定义的
渲染(选项)
函数并在那里设置模型
id
,而是直接在
编辑活动
模型上设置它:

然后去掉多余的

this.model.set({"id":options.id})
渲染(选项)
以及
选项
参数。它应该类似于这样:

render: function(){
    this.$el.append( _.template(EditTemplate));
    console.log(this.model.get("id"));
    this._modelBinder.bind(this.model, this.el);
    return this;
}
您的模型还有一个额外的
url
功能:

url : function(){
   var url = this.urlRoot + this.id;
    return url;
}
您不需要这个,因为模型的
id
会自动附加在
urlRoot
之后


和你无关的问题我看你用过了

http://localhost:3033/campaign/update
来定义您的更新URL。您使用的HTTP方法已经说明了将执行什么样的操作,这就是为什么您可以(并且应该)编写不带动词的URL的原因。只需删除额外的/更新

以下是有关最佳实践的简要总结:

再次检查请求是否为post请求而不是put请求。”“加载资源失败”错误通常与缺少的请求处理程序有关。

我按照您所说的做了,现在请求看起来是这样的,但我仍然收到此错误:加载资源失败:服务器响应状态为404(未找到)@akoskm/update没有问题服务器上的bcz post请求是:app.post('campaign/update/:id',campaign.update);@ana没关系,这是您在
id
中的值。如果资源不存在(没有id),主干将尝试执行HTTP POST方法;如果资源已经存在(有id),则尝试执行HTTP PUT方法。您必须有适当的REST资源来处理这些请求。@ana在这种情况下,您还需要一个PUT资源。我按照您对我说的做了,现在id已设置,但仍然出现以下错误:加载资源失败:服务器响应状态为404(未找到)@akoskm
http://localhost:3033/campaign/update