【问题标题】:Mongoose $push from HTML Form not working来自 HTML 表单的 Mongoose $push 不起作用
【发布时间】:2015-03-02 16:07:39
【问题描述】:

谁能告诉我我做错了什么。

我的 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>

我的特快路线:

  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)

   );

从我的 HTML 表单发布我收到以下错误:

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

但是当我通过 POSTMAN 测试它时,它可以工作:

我做错了什么。为什么它在我的 HTML 表单中不起作用?

【问题讨论】:

    标签: javascript node.js mongodb express mongoose


    【解决方案1】:

    路由不匹配,你有这个网址

    /user?miles=66&activity=asdasd
    

    然后这条路线

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

    那条路线正在寻找类似的东西

    /user/66
    

    它不寻找查询字符串,那将是

    app.put('/user', function(req, res) {
    
        var miles    = req.query.miles;
        var activity = req.query.activity;
    

    除非您有充分的理由使用 PUT 请求,否则您应该将其更改为使用 GET

    另外,&lt;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
    

    【讨论】:

    • 感谢您的回复。基本上我在 mongoDB 模式中有一个对象数组。我希望能够通过提交表单将对象推送到数组中。所以这就是我使用 PUT 的原因。继承人一点背景stackoverflow.com/questions/28811905/… 非常感谢您的帮助。再次感谢您。
    • @user2190986 - 我认为大多数浏览器在技术上都会让你发出 PUT 请求,但它是无效的,表单的唯一有效方法是 GET 或 POST,这就是你应该使用的,有没有理由在这里使用 PUT 请求。此外,如答案中所述,路由似乎是错误的,与您使用的 URL 不匹配。
    【解决方案2】:

    html 表单中没有“PUT”动词,而您是这样实现的:

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

    您必须以 html 形式使用 method="POST" 并将您的路线更改为:

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

    用这种方法也不是坏事。

    但是,如果您正在开发前端应用程序,通常使用具有“PUT”动词的 XMLHttpRequest 对象,并且您的路由可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 2012-07-05
      • 2017-11-27
      • 2010-12-09
      相关资源
      最近更新 更多