我使用Backbone,Node,MongoDB和Express创建了这个应用程序来学习。 POST请求工作正常,但由于某种原因,PUT和DELETE请求发送的时间很长,而且它们似乎被拒绝了。我已经检查并重新检查,似乎没有任何错误,根据控制台,请求是我所期望的。
这是我的中间件代码,包括方法覆盖:
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(methodOverride()); //so we can receive DELETE requests
以下是分别处理PUT和DELETE的服务器函数:
router.put('/api/dogs/:id', function(req, res) {
mongo.db()
.collection('dogs')
.update({_id: req.params.id}, req.body, function (err) {
if (err) {throw err;}
});
});
router.delete('/api/dogs/:id', function(req, res) {
mongo.db()
.collection('dogs')
.remove({_id: req.params.id}, function (err) {
if (err) {throw err;}
});
});
分别发出PUT和DELETE请求的视图函数,以防万一:
close: function (ev) {
var $input = $(ev.target);
var value = $input.val().trim(); //we trim the value of the input
var data = {};
data[$input.attr('name')] = value;
this.model.set(data);
this.model.save();
},
clear: function () {
this.model.destroy();
}
有人能看出什么问题吗?
非常感谢!
答案 0 :(得分:0)
我设法解决了自己的问题。如果有人想知道,需要做的是转换从req.params获取的id并转换为ObjectId,并从发送的项目中删除_id。
var id = new mongodb.ObjectId(req.params.id);
var dog = req.body;
delete( dog._id );
非常感谢!