RESTful Express Mongoose& Backbone - Backbone model.remove()不工作

时间:2014-04-05 13:52:58

标签: ajax node.js backbone.js express mongoose

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

除删除路线外,所有路线都运行良好。

如果我调用this.model.destroy,我总是会收到此错误:

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

404在Express的删除路径中返回,就像Express不支持它一样,但我在网上看到了很多使用它的例子。

这是我的设置:


Mongoose Schema:

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

User = mongoose.model('User', UserSchema);

ExpressJS路线:(不工作)

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

OR

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调用路由,如果Backbone内部也使用Ajax,为什么会这样呢?为什么Backbone无法制作如此简单的模型.destroy()?

有没有办法配置Backbone Model.destroy方法,就像上面的Ajax示例一样?感谢

1 个答案:

答案 0 :(得分:1)

发现问题。 Backbone model.remove()没有发送id,因为我以这种方式使用“url”:

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

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

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

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

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

urlRoot: '/users'

像urlRoot一样使用魅力