我似乎在AngularJS和ExpressJS中的数组中执行HTTP Put请求时遇到问题。问题是,当我第一次调用HTTP Put时,一切正常。但是,当我尝试第二次呼叫时,它不起作用。以下是我的尝试:
当我点击一个按钮时,我打电话执行以下HTTP Put请求:
$scope.currentUser.eventsAttending.push(event.eventName);
$http.put('/api/users/' + $scope.currentUser._id, $scope.currentUser)
.success(function(data){
console.log("Success. User " + $scope.currentUser.name);
});
这是我在User.model.js中的用户架构/模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var User = require('./user.model');
var UserSchema = new Schema({
name: String,
...
eventsAttending: [{ type: String, ref: 'Event'}]
});
我在index.js中路由HTTP Put Request:
router.put('/:id', controller.update);
这是我在User.controller.js中名为controller.update
的实际HTTP Put函数:
// Updates an existing event in the DB.
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
User.findById(req.params.id, function (err, user) {
if (err) { return handleError(err); }
if(!user) { return res.send(404); }
var updated = _.merge(user, req.body);
updated.markModified('eventsAttending');
updated.save(function (err) {
if (err) { return handleError(err);}
return res.json(200, user);
});
});
};
...
function handleError(res, err) {
console.log("Error: ", err);
return res.send(500, err);
}
在我第二次尝试调用HTTP Put函数(上面的exports.update)时,我总是在Mongoose中遇到错误:
TypeError: Object VersionError: No matching document found. has no method 'send'
at handleError (/Users/schan/test/go-v2/server/api/user/user.controller.js:131:14)
at Promise.<anonymous> (/Users/schan/test/go-v2/server/api/user/user.controller.js:43:25)
错误基本上是我在HTTP Put函数中调用if(err) return { handleError(err); }
的地方,当我打印出错误时,我得到Error undefined。我真的不确定如何调试这个或我可能做错了什么。谁能指出我正确的方向?如果是这样那将是伟大的!感谢。
答案 0 :(得分:0)
您未将res
传递给handleError()
。将handleError(err);
的实例更改为handleError(res, err);