Увеличение объекта не работает (mongoose, node.js, express, mongodb) - PullRequest
1 голос
/ 15 мая 2011

У меня есть коммит этого приложения вверх здесь

Основная проблема в 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 } }

1 Ответ

0 голосов
/ 16 мая 2011

Подтверждено, это снова работает с Mongoose v1.3.5 - код был в порядке, Mongoose имел ошибку.

Оказалось, что это ошибка в Mongoose v.1.3.1 - 1.3.3. Это было исправлено в недавнем коммите, но пока не в основной сборке

https://github.com/LearnBoost/mongoose/issues/342

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...