2016-12-13 81 views
0

我無法確定我的文檔沒有更新。Node JS express - 更新單個文檔

我獲取任何記錄並將其加載到與http://localhost:3000/update2?buyerID=2299的形式。但是當我更改一個字段並單擊提交時,該字段不會更新時,我重定向到列出所有文檔的路由。它和以前一樣。

任何人都可以看到我會出錯嗎?

http://prntscr.com/dj49wd - 形式

得到

router.get('/update2', function(req, res) { 
     var buyerID = req.query.buyerID; 

     if (!buyerID || !parseInt(buyerID)) { 
      res.render('error', {message: "You need to enter a buyerID to update a specific order", error:{status:"", stack: ""}}); 
     } else { 

      mongoClient.connect(url, function (err, db) { 
       if (err) { 
        res.render('error', {message: "Failed to connect to MongoDB",error:{status:"", stack: ""}}); 
       } else { 
        var WishList = db.collection('orders'); 
        WishList.findOne({"buyerID": parseInt(buyerID)}, function(err, result) { 
         if (err || !result || result.length == 0) { 
          res.render('error', {message: "Failed to find order",error:{status:"", stack: ""}}); 
         } else { 
          console.log("get results", result) 
          res.render('updateOrder2', {qs: result}); 
         } 
        }) 
       } 
      }); 
     } 
    }); 

router.post('/update2', function(req, res) { 
     if (!buyerID || !parseInt(buyerID)) { 
      res.render('error', {message: "Failed to update order make sure the ID is current", error:{status:"", stack: ""}}); 
     } else { 

      mongoClient.connect(url, function (err, db) { 
       if (err) { 
        res.render('error', {message: "Failed to connect to MongoDB", error:{status:"", stack: ""}}); 
       } else { 
        var WishList = db.collection('orders'); 
        var buyerID = req.query.buyerID; 

        var u2Order = { 
         buyerID: req.body.buyerID, 
         name: { 
          f: req.body.f, 
          s: req.body.s 
         }, 
         address: { 
          HouseNum: req.body.HouseNum, 
          streetName:req.body.streetName, 
          town:req.body.town, 
          postCode: req.body.postCode 
         }, 
         deliveryInfo: [{delivId: req.body.delivId, 
          serviceName: req.body.serviceName, 
          postTime: req.body.postTime, 
          delivCost: req.body.delivCost, 
          pickUp: req.body.pickUp}], 

         gender: req.body.gender, 
         student: req.body.student, 
         pName: req.body.pName, 
         purchaseDate: req.body.purchaseDate, 
         price: req.body.price, 
         sName: req.body.sName 

        }; 
        console.log("Updating..", u2Order) 
        WishList.updateOne({"buyerID": parseInt(buyerID)}, {$set: u2Order}, function (err, result){ 
         if (err) { 
          console.log("Cannot update", err) 
         } else { 
          console.log("Updated..", order) 
          res.redirect("/orders") 
         } 
        }) 

       } 
      }); 
     } 
    }); 

的JSON

{ 
     "buyerID":2447, 
     "name":{ 
     "f":"Jess", 
     "s":"Thompson" 
     }, 
     "gender":"Female", 
     "birthDate":"1987-02-02", 
     "student":false, 
     "appOS":"Android", 
     "address":{ 
     "HouseNum":"22", 
     "streetName":"Coolford Road", 
     "town":"Sedley", 
     "postCode":"DY3 9CK" 
     }, 
     "productID":2382, 
     "pName":"Macbook Pro", 
     "type":"Laptop", 
     "purchaseDate" : "2016-11-30", 
     "releaseDate":"2016-03-11", 
     "provider":"Apple", 
     "starRating":3, 
     "available":true, 
     "About":"2.9GHz dual-core Intel Core i5 processor, Turbo Boost up to 3.3GHz", 
     "sellerID":2245, 
     "sName":"Amazon.co.uk", 
     "price":1700.33, 
     "discount":false, 
     "deliveryInfo":[ 
     { 
      "delivId":2382, 
      "serviceName":"UPS", 
      "postTime":"1 Day", 
      "delivCost":"£7.50", 
     "pickUp": false 
     }, 
     { 
      "delivId":2383, 
      "serviceName":"Royal Mail", 
      "postTime":"2-5 Days", 
      "delivCost":"free", 
      "pickUp": false 
     }, 
     { 
      "delivId":2384, 
      "serviceName":"UPS", 
      "postTime":"1 Week", 
      "delivCost":"free", 
      "pickUp": true 

     } 
     ] 
    } 

updateOrder2.ejs

<!DOCTYPE html> 
<html> 
<head> 
    <title>Update Recipe</title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
</head> 
<body> 

<form name= "updateOrder" action="/updateOrder" method="POST"> 
    User ID:<br> 
    <input type="text" name="buyerID" value = "<%=qs.buyerID%>"><br> 
    <b><p>Nested Objects (firstname and second name)</p></b> 
    First Name:<br> 
    <input type="text" name="f" value = "<%=qs.name.f%>"/><br> 
    Second Name:<br> 
    <input type="text" name="s" value = "<%=qs.name.s%>"/><br> 
    <b><p>Nested object - customer address</p></b> 
    House number:<br> 
    <input type="text" name="HouseNum" value = "<%=qs.address.HouseNum%>"/><br> 
    Street name:<br> 
    <input type="text" name="streetName" value = "<%=qs.address.streetName%>"/><br> 
    town:<br> 
    <input type="text" name="town" value = "<%=qs.address.town%>"/><br> 
    post code:<br> 
    <input type="text" name="postCode" value = "<%=qs.address.postCode%>"/><br> 
    Gender:<br> 
    <input type="text" name="gender" value = "<%=qs.gender%>"/><br> 
    Student?:<br> 
    <input type="text" name="student" value = "<%=qs.student%>"/><br> 
    Product ID:<br> 
    <input type="text" name="productID" value = "<%=qs.productID%>"/><br> 
    Product Name:<br> 
    <input type="text" name="pName" value = "<%=qs.pName%>"/><br> 
    Product Type:<br> 
    <input type="text" name="type" value = "<%=qs.type%>"/><br> 
    Date Purchased:<br> 
    <input type="text" name="purchaseDate" value = "<%=qs.purchaseDate%>"/><br> 
    Product Price:<br> 
    <input type="text" name="price" value = "<%=qs.price%>"/><br> 
    Seller Name:<br> 
    <input type="text" name="sName" value = "<%=qs.sName%>"/><br> 
    <b><p>Array Objects (delivery details)</p></b> 
    DeliveryID:<br> 
    <input type="text" name="delivID" value = "<%=qs.deliveryInfo[1].delivId%>"/><br> 
    Survice Name:<br> 
    <input type="text" name="serviceName" value = "<%=qs.deliveryInfo[1].serviceName%>"/><br> 
    Post Time:<br> 
    <input type="text" name="postTime" value = "<%=qs.deliveryInfo[1].postTime%>"/><br> 
    Delivery cost:<br> 
    <input type="text" name="delivCost" value = "<%=qs.deliveryInfo[1].delivCost%>"/><br> 
    Pickup:<br> 
    <input type="text" name="pickUp" value = "<%=qs.deliveryInfo[1].pickUp%>"/><br> 
    <br><br> 
    <input type="submit" value="Submit" /> 
</form> 
</body> 
</html> 
+0

您使用的是Mongoose還是任何類型的ORM?有助於瞭解我們正在處理的事情。 –

+0

即時通訊使用express和MongoDB。不是貓鼬 –

+0

你能看到這個問題嗎? –

回答

0

您是否嘗試過findOne然後修改使用對象的字段markModified

function async(cb) { 
    WishList.findOne({id: id}, function(err, doc) { 
     if (err) throw err; 
     doc.buyerID = req.body.buyerID; 
     doc.name = { 
      f: req.body.f, 
      s: req.body.s 
     }; 
     doc.address = { 
      HouseNum: req.body.HouseNum, 
      streetName:req.body.streetName, 
      town:req.body.town, 
      postCode: req.body.postCode 
     }; 
     doc.deliveryInfo = [{delivId: req.body.delivId, 
      serviceName: req.body.serviceName, 
      postTime: req.body.postTime, 
      delivCost: req.body.delivCost, 
      pickUp: req.body.pickUp}]; 

     doc.gender = req.body.gender, 
     doc.student = req.body.student, 
     doc.pName = req.body.pName, 
     doc.purchaseDate = req.body.purchaseDate, 
     doc.price = req.body.price, 
     doc.sName = req.body.sName 

     doc.markModified('name'); 
     doc.markModified('address'); 
     doc.markModified('deliveryInfo'); 

     doc.save(cb); 

     }; 
} 
+0

不知道這個答案。 console.log更新它的罰款,我認爲ejs有問題顯示更新的數據 –

+0

看看我的ejs plz –

+0

@JackWood檢查您的更新,您必須在更新後的console.log獲取您的文檔通過您的應用程序或通過Mongo控制檯。如果您發現文檔已更新,您看到的內容可能是查詢緩存,但是,問題不會更新文檔。 – aug2uag

0

這是正確的嗎?

router.get('/update2', function (req, res) { 
    var buyerID = req.query.buyerID; 

    if (!buyerID || !parseInt(buyerID)) { 
     res.render('error', { 
      message: "You need to enter a buyerID to update a specific order", 
      error: {status: "", stack: ""} 
     }); 
    } else { 
     var MongoClient = mongodb.MongoClient; 
     MongoClient.connect(url, function (err, db) { 
      if (err) { 
       res.render('error', {message: "Failed to connect to MongoDB", error: {status: "", stack: ""}}); 
      } else { 
       function async(cb) { 
        var WishList = db.collection('orders'); 
        WishList.findOne({"buyerID": parseInt(buyerID)}, function (err, result) { 
         if (err || !result || result.length == 0) { 
          res.render('error', {message: "Failed to find order", error: {status: "", stack: ""}}); 
         } else { 
          doc.buyerID = req.body.buyerID; 
          doc.name = { 
           f: req.body.f, 
           s: req.body.s 
          }; 
          doc.address = { 
           HouseNum: req.body.HouseNum, 
           streetName: req.body.streetName, 
           town: req.body.town, 
           postCode: req.body.postCode 
          }; 
          doc.deliveryInfo = [{ 
           delivId: req.body.delivId, 
           serviceName: req.body.serviceName, 
           postTime: req.body.postTime, 
           delivCost: req.body.delivCost, 
           pickUp: req.body.pickUp 
          }]; 

          doc.gender = req.body.gender, 
           doc.student = req.body.student, 
           doc.pName = req.body.pName, 
           doc.purchaseDate = req.body.purchaseDate, 
           doc.price = req.body.price, 
           doc.sName = req.body.sName 

          doc.markModified('name'); 
          doc.markModified('address'); 
          doc.markModified('deliveryInfo'); 

          doc.save(cb); 
          console.log("get results", result) 
          res.render('updateOrder2', {qs: result}); 

         } 
        }) 
       } 
      } 
     }) 
    } 
}) 











router.post('/update2', function (req, res) { 
    if (!buyerID || !parseInt(buyerID)) { 
     res.render('error', { 
      message: "Failed to update order make sure the ID is current", 
      error: {status: "", stack: ""} 
     }); 
    } else { 
     var MongoClient = mongodb.MongoClient; 
     MongoClient.connect(url, function (err, db) { 
      if (err) { 
       res.render('error', {message: "Failed to connect to MongoDB", error: {status: "", stack: ""}}); 
      } else { 
       var WishList = db.collection('orders'); 
       var buyerID = req.query.buyerID; 

       var u2Order = { 
        buyerID: req.body.buyerID, 
        name: { 
         f: req.body.f, 
         s: req.body.s 
        }, 
        address: { 
         HouseNum: req.body.HouseNum, 
         streetName: req.body.streetName, 
         town: req.body.town, 
         postCode: req.body.postCode 
        }, 
        deliveryInfo: [{ 
         delivId: req.body.delivId, 
         serviceName: req.body.serviceName, 
         postTime: req.body.postTime, 
         delivCost: req.body.delivCost, 
         pickUp: req.body.pickUp 
        }], 

        gender: req.body.gender, 
        student: req.body.student, 
        pName: req.body.pName, 
        purchaseDate: req.body.purchaseDate, 
        price: req.body.price, 
        sName: req.body.sName 

       }; 
       console.log("Updating..", u2Order) 
       WishList.updateOne({"buyerID": parseInt(buyerID)}, {$set: u2Order}, function (err, result) { 
        if (err) { 
         console.log("Cannot update", err) 
        } else { 
         console.log("Updated..", order) 
         res.redirect("/orders") 
        } 
       }) 
       db.close(); 
      } 
     }) 
    } 
}) 
+0

您的路線結構錯誤,以保持打開和關閉連接,只需打開一次然後在該範圍內工作 – aug2uag