2015-08-25 6 views
0

У меня возникают проблемы с простым методом PUT в Node.js (MongoDB collection.update). Любая помощь будет оценена по достоинству. На данный момент я не получаю ошибку, просто пустой ответ.Метод PUT в Node.js/MongoDB

index.js:

app.put('/UpdateValues/:collection/:entity', function(req, res) { 
    var params = req.params; 
    var entity = params.entity; 
    var collection = params.collection; 

    var value1 = req.body.value1; 
    var value2 = req.body.value2; 

    if (entity) { 
     collectionDriver.updateValues(collection, entity, value1, value2, function(error, objs) { 
      if (error) { res.status(400).send(error); } 
      else { res.status(200).send(objs); } 
     }); 
    } else { 
     res.send(400, {error: 'bad url', url: req.url}); 
    } 
}); 

collectionDriver.js:

CollectionDriver.prototype.updateValues = function(collectionName, nameDoc, value1new, value2new, callback) { 
    this.getCollection(collectionName, function(error, the_collection) { 
     if (error) callback(error); 
     else { 

      the_collection.update(
       { name: nameDoc }, 
       { $set: { 
        value1: value1new, 
        value2: value2new 
       }}, 
       function(err, result) { 
         if (err) throw err; 
        } 
       ); 

     } 
    }); 
}; 

Тестирование с:

$ локон -i -X ​​PUT -H «Content-Type: применение/JSON '-d' {"value1": "1", "value2": "1"} '

+1

Параметр 'callback' вы передаете в никогда не быть ссылки на успех. Также '.update()' не возвращает измененный документ. Вероятно, вы хотите '.findOneAndUpdate()', если вы ожидаете модифицированного ответа. –

+0

спасибо Блейкс! Значения обновляются, только обратный вызов не происходит. – beachCode

ответ

1

Ссылка на обратный вызов, который вы передаете внутри своей функции. В настоящее время вы этого не делаете. Вы также, кажется, как вы expeting измененный документ в ответ, так что вам нужно .findOneAndUpdate() вместо:

CollectionDriver.prototype.updateValues = function(collectionName, nameDoc, value1new, value2new, callback) { 
    this.getCollection(collectionName, function(error, the_collection) { 
    if (error) callback(error); 

    the_collection.findOneAndUpdate( // <-- new method 
     { name: nameDoc }, 
     { $set: { 
     value1: value1new, 
     value2: value2new 
     }}, 
     { returnOriginal: false },  // <-- tells to return modified document 
     callback       // <--- passes to callback you passed in 
    ); 

    }); 
}); 
Смежные вопросы