2017-09-16 112 views
0

我正在嘗試將一個字符串插入到數組中的數據庫條目中。這是put方法本身:爲什麼我的Mongoose(findByIdAndUpdate)查詢在數據庫中更新?

app.put('/todo/:id', urlencodedParser, function(req, res) { 
    Todo.findByIdAndUpdate({_id:ObjectId(req.params.id)}, 
     { "$push": { "item": req.body } }, 
     { "new": true, "upsert": true }, 
     function (err, data) { 
      if (err) throw err; 
      console.log("test"); 
     } 
    ); }); 

的問題是,日誌從不打印到控制檯這讓我覺得這個方法是不是永遠實際上被調用。我假設它是與前端部分,在這裏我呼籲按鈕put方法提交,然後?:

$('form').on('submit', function(){ 

     var item = $('form input'); 
     var todo = {item: item.val()}; 

     $.ajax({ 
     type: 'PUT', 
     url: '/todo/' + id, 
     data: todo, 
     success: function(data){ 
      location.reload(); 
     } 
     }); 

     return false; 

    }); 

行爲明智的,當我點擊提交按鈕,文本框清除(如它應該),並將網址更改爲:

/todo/59bd48905a2ed911e0d480f2?item=item+to+be+inserted 

Theres no errors logging in console。我哪裏錯了?

E:

這裏是我的架構,以及:

var todoSchema = new mongoose.Schema({ 
    item: [String] 
}); 

這裏的URL編碼分析器:

var bodyParser = require('body-parser'); 
var urlencodedParser = bodyParser.urlencoded({extended: false}); 
+0

** ** findByIdAndUpdate預計只是** **的ID作爲第一個參數。您可以使用** findOneAndUpdate **傳遞一個對象以通過_id進行匹配。 –

+0

@SteveHolgado嗯,即使傳遞只是req.params.id似乎沒有幫助 – treo

+0

我明白你說的文本框清除,成功功能達成?如果是這樣,我在處理程序中看不到任何迴應。 'urlencodedParser'中間件是否可以響應請求並且處理程序的回調從來沒有達到? –

回答

1

好了,在您需要添加的preventDefault前端代碼,而且您還沒有定義id變量。所以這應該工作:

$('form').on('submit', function (event) { 
    event.preventDefault() 
    var item = $('form input') 
    var todo = {item: item.val()} 
    var path = window.location.pathname.split('/') 
    var id = path[2] 
    console.log(id) 
    $.ajax({ 
     type: 'PUT', 
     url: '/todo/' + id, 
     data: todo, 
     success: function (data) { 
     // do something with the data via front-end framework 
     location.reload() 
     } 
    }) 

    return false 
    }) 

而在服務器沒有必要字符串化req.body.item

app.put('/todo/:id', urlencodedParser, function (req, res) { 
    console.log(req.body) 
    Todo.findByIdAndUpdate(req.params.id, 
     { '$push': { 'item': req.body.item } }, 
     { 'new': true, 'upsert': true }, 
     function (err, data) { 
     if (err) throw err 
     console.log('here') 
     res.end() 
     } 
    ) 
    }) 
+0

I sincerely感謝幫助,這就像一個魅力! – treo

相關問題