У меня есть коммит этого приложения вверх здесь
Основная проблема в server.js @ line 234 У меня есть метод, который увеличивает счетчик в параметре param.Это не работает - вы можете посмотреть в models.js соответствующие модели данных.
В строке 242 у меня есть еще один инкремент счетчика в объекте pivot, который представляет собой массив документов в объекте param.Здесь счетчик, который настроен одинаково, работает - я не уверен, что я делаю здесь неправильно.
РЕДАКТИРОВАТЬ: Добавлен код из github
Модели данных
var Pivot = new Schema({
value : {type: String, validate: [validateLength, 'length error'] }
, destination : {type: String, validate: [validateUrl, 'url error'] }
, counter : {type: Number, default: 0 }
});
var Param = new Schema({
title : {type: String, validate: [validateLength, 'length error'] }
, desc : {type: String, validate: [validateDesc, 'length error'] }
, defaultUrl : {type: String, validate: [validateUrl, 'url error'] }
, counter : {type: Number, default: 0 }
, pivots : [Pivot]
});
mongoose.model('Param', Param);
Предварительные условия маршрута
app.param('title', function(req,res, next){
Param.findOne({"title":req.param('title')}, function(err, record){
if (err) return next(err);
if (!record) return next (new Error('Parameter Not Found') );
req.record = record;
next();
});
});
app.param('value', function(req,res, next){
req.pivot = req.record.findPivot(req);
if (!req.pivot) return next (new Error('Pivot Not Found') );
next();
});
Перенаправления
app.get('/redirect/:title', function(req, res, next){
req.record.counter++;
req.record.save();
res.redirect(req.record.defaultUrl);
});
app.get('/redirect/:title/:value', function(req, res, next){
req.pivot.counter++;
req.record.save();
res.redirect(req.pivot.destination);
});
Некоторая отладка
console.dir (req.record.counter) Кажется, что выводит родительский объект, а счетчик отображается как [Циркуляр].
{ _atomics: {},
_path: 'counter',
_parent:
{ doc:
{ counter: [Circular],
pivots: [Object],
_id: 4dce2a3399107a8a2100000c,
title: 'varun',
desc: 'my blog',
defaultUrl: 'http://varunsrin.posterous.com/' },
activePaths:
{ paths: [Object],
states: [Object],
stateNames: [Object],
map: [Function] },
saveError: null,
isNew: false,
pres: { save: [Object] },
errors: undefined } }
Запуск console.dir (req.pivot.counter) в сводной строке 'gmail' указанного выше параметра возвращает.В этом случае счетчик увеличивается и отображается успешно
{ _atomics: {},
_path: 'counter',
_parent:
{ parentArray:
[ [Circular],
_atomics: [],
validators: [],
_path: 'pivots',
_parent: [Object],
_schema: [Object] ],
parent: undefined,
doc:
{ counter: [Circular],
_id: 4dce2a6499107a8a21000011,
value: 'gmail',
destination: 'http://www.gmail.com/' },
activePaths:
{ paths: [Object],
states: [Object],
stateNames: [Object] },
saveError: null,
isNew: false,
pres: { save: [Object] },
errors: undefined } }