2015-03-02 92 views
0

任何人都可以告訴我我做錯了什麼。

我的HTML表單:

<form action="/user/:id" method="put"> 
    <div class="form-group"> 
     <label>Miles</label> 
     <input type="text" class="form-control" name="miles"> 
    </div> 
    <button type="submit" class="btn btn-warning btn-lg">Login</button> 
</form> 

我快線:從我的HTML表單

app.put('/user/:id', function(req, res) { 
     User.findById(req.body.params.id, function(err, user) { 
     if (err) 
      res.send(err); 
      console.log(user.id); 

      User.findByIdAndUpdate(
         user.id, 
         {$push: {"milesLog": {miles: req.body.miles}}}, 
         {safe: true, upsert: true}, 

         function(err, model) { 
         console.log(err); 
        }, 
         res.json(user) 

    ); 

發帖我收到以下錯誤:

Cannot GET /user?miles=66&activity=asdasd 

但是當我通過P來測試它OSTMAN它的工作原理:

enter image description here

我在做什麼錯。爲什麼它不能從我的HTML表單中工作?

回答

0

路由不匹配,你有這樣的URL

/user?miles=66&activity=asdasd 

,然後這條路

app.put('/user/:id', .... 

這條路正在尋找這樣的事情

/user/66 

它不尋找querystrings,那將是

app.put('/user', function(req, res) { 

    var miles = req.query.miles; 
    var activity = req.query.activity; 

除非您有充分的理由使用PUT請求,否則應該改爲使用GET

另外,<form action="/user/:id" ...不是一個有效的URL,你不能在URL中有冒號,而且你似乎有點誤解,你的路由中的:id匹配任何東西,只要它是有效的路由,那麼它將匹配

/user/frank 
/user/77 
/user/something?querystring 

等等,然後你可以訪問路線

app.get('/user/:id', function(req, res) { 

    var user = req.params.id; // returns "frank" etc 
+0

謝謝你的回覆。基本上我有一個mongoDB模式中的對象數組。我希望能夠通過提交表單將對象推入數組中。這就是爲什麼我使用PUT。繼承人一點點背景http://stackoverflow.com/questions/28811905/how-to-put-an-object-in-an-array-in-mongodb-using-mongoose-on-form-submission你的幫助是非常讚賞。再次感謝你。 – Skywalker 2015-03-02 18:28:34

+0

@ user2190986 - 我認爲大多數瀏覽器在技術上都會讓你做一個PUT請求,但它是無效的,表單唯一有效的方法是GET或POST,這就是你應該使用的,沒有理由使用PUT請求這裏。另外,正如答案中指出的那樣,路由似乎是錯誤的,並且與您使用的URL不匹配。 – adeneo 2015-03-02 18:50:35

0

沒有「PUT」動詞在HTML表單,而你是這樣實現它裏面:

<form action="/user/:id" method="put"> 

您在HTML表單使用method="POST"和改變你的路線:

app.post('/user/:id')

這不是一件壞事使用這種方法。

但是,如果您正在開發一個前端應用程序,通常使用具有「PUT」動詞的XMLHttpRequest對象,並且您的路線將工作得很好。