Node.js 无法使用id在服务器上进行更新
我正在更新表单,我想在服务器上用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"
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