【发布时间】:2014-05-17 21:18:42
【问题描述】:
我正在使用 Express、Mongoose 和 Backbone 和 Marionette 开发一个 Node 应用程序。
除删除路由外,所有路由都运行良好。
如果我调用 this.model.destroy,我总是会得到这个错误:
DELETE http://localhost:3000/api/user 404 (Not Found)
404 在 Express 的删除路由中返回,就像 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 调用路由,如果 Backbone 内部也使用 Ajax,为什么这会起作用?为什么Backbone 做不出这么简单的model.destroy()?
有没有办法像上面的 Ajax 示例一样配置 Backbone Model.destroy 方法以正常工作?谢谢
【问题讨论】:
-
在执行 DELETE 请求时,似乎没有设置模型的 id。 HTTP DELETE 请求 url 不应该是,例如,localhost:3000/api/user/35,其中 35 是用户的 id?它看起来不像正在发送用户的 id...
标签: ajax node.js backbone.js express mongoose