【发布时间】:2014-10-08 09:17:00
【问题描述】:
我一直在试图弄清楚为什么我的 HTTP Put 在我使用一次后一直没有工作。当我点击一个按钮时,我将当前用户的 id 推送到一个数组中,如下所示:
$scope.currentUser = {
'eventsAttending' = [];
}
$scope.attending = function(event, id){
if($cookieStore.get('token')){
$scope.currentUser = Auth.getCurrentUser();
}
$scope.currentUser.eventsAttending.push(event._id);
$http.put('/api/users/' + $scope.currentUser._id, $scope.currentUser)
.success(function(data){
console.log("Success. User " + $scope.currentUser.name);
});
}
而我的 HTTP Put 函数是这样的:
var express = require('express');
var controller = require('./user.controller');
var config = require('../../config/environment');
var auth = require('../../auth/auth.service');
router.get('/:id', controller.getEvents);
var router = express.Router();
exports.update = function(req, res) {
if(req.body._id) { delete req.body._id; }
User.findById(req.params.id, function (err, user) {
if (err) { return res.send(500, err); }
if(!user) { return res.send(404); }
var updated = _.merge(user, req.body);
updated.markModified('eventsAttending');
updated.save(function (err) {
if (err) { return res.send(500, err); }
return res.json(200, user);
});
});
};
在我的 HTML 页面中,我可以参加多个活动,每个活动都有一个名为 Attend 的按钮,我在其中调用 $scope.attending 并调用该函数并发生 HTTP Put。所有这些都适用于我选择参加的第一个活动。但是,当我单击另一个事件的 Attend 按钮时,我收到一条错误消息:
{"message":"No matching document found.","name":"VersionError"}
我也不知道为什么。当我尝试在 mongoose 调用中执行 updated.save() 并得到 res.send(500, err)
我尝试查看http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html 来解决问题,因为我做了一些谷歌搜索,但我不断收到一条错误消息:
Undefined type at `versionKey`
Did you try nesting Schemas? You can only nest using refs or arrays.
添加到我的架构后:
var UserSchema = new Schema({ 版本密钥:'我的版本密钥', ...
我还尝试将.save() 函数更改为.update(),正如网上有人建议的那样,但这似乎给了我更多错误。任何想法如何解决这一问题?那将不胜感激!
【问题讨论】:
标签: javascript node.js angularjs mongoose mean-stack