2015-03-02 96 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对象,并且您的路线将工作得很好。