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的魅力一样工作