RESTful Express Mongoose&Backbone – Backbone model.remove()不起作用

我正在使用Express,Mongoose和Backbone与Marionette开发Node应用程序。

除了删除路由,所有的路由都运行正常。

如果我调用this.model.destroy,我总是得到这个错误:

DELETE http://localhost:3000/api/user 404 (Not Found) 

在Express的删除路由中,404被返回,就像Express不支持它一样,但是我已经看到了使用它的大量例子。

这是我的设置:


mongoose纲要:

 var UserSchema = new mongoose.Schema( { name: String, email: String, age: Number }); User = mongoose.model('User', UserSchema); 

ExpressJS路线:(不工作)

 app.del('/api/user/:id', user.remove); 

要么

 app.delete('/api/user/:id', user.remove); 

这个路由被骨干model.destroy()调用,但是返回错误404。


ExpressJS的user.js控制器:(工作,但没有达到因为以前的404)

 exports.remove = function(req, res) { var id = req.params.id; User.findById(req.params.id, function(err, user) { user.remove(function(err) { if(err) res.json(err); res.json('all good'); }); }); }; 

BackboneJS模型

 var User = Backbone.Model.extend({ idAttribute: "_id", url: '/api/user/', }); 

BackboneJS客户端视图

 var UserView = Backbone.Marionette.ItemView.extend( { template: Handlebars.compile($('#userView').html()), events: { 'click .delete-button': 'deleteUser' }, deleteUser: function(event) { this.model.remove(); } }); 

我总是得到这个错误:

 DELETE http://localhost:3000/api/user 404 (Not Found) 

但是,如果我使用这个直接的ajax调用它的作品:

 jQuery.ajax({ url:'/api/user/' + this.model.id, type: 'DELETE', success:function(data, textStatus, jqXHR) { } }); 

那么,为什么这个工作,如果我通过Ajax调用路由,如果骨干内部也使用Ajax? 为什么Backbone无法做出如此简单的model.destroy()?

有没有办法configurationBackbone Model.destroy方法,就像上面的Ajax例子一样工作? 谢谢

发现问题。 Backbone model.remove()没有发送这个id,因为我是这样使用“url”的:

 Backbone.Model.extend({ url: '/users', //... }); 

这将告诉Backbone正确使用/用户作为所有操作的URL。

为了确保使用“url”发送id,可以使用一个函数:

 url: function() { return '/list_items/' + encodeURIComponent(this.id) } 

或者更好的使用“urlRoot”而不是“url”,让默认的“url”函数添加id:

 urlRoot: '/users' 

像使用urlRoot的魅力一​​样工作