Expressjs / Nodejs 路由适用于 POST,但不适用于 PUT

Expressjs / Nodejs route works with POST, but not with PUT

除了将路由方法从 "Post" 更改为 "Put" 之外,我什么也没做,但由于某种原因,它中断了。

POST 路线工作正常:

在 App.js 路线中 POST:

 app.post('/editlisting/update',listing.update);

提交给它的editListing.jade文件:

extends layout

block content
  div(class="container")
      ul(class="userlist")
      each listing, i in listings
        li
          h1 #{listing.name}
          form(method='post', action='update' class='regform')
            label Name:
            input(type='text', name='name', value='#{listing.name}')
            br
            label Number of Guests:
            input(type='text', name='noGuests', value='#{listing.noGuests}')
            input(type='hidden', name='id', value='#{listing._id}')
            label Price:
            input(type='text', name='price', value='#{listing.price}')
            input(type='submit', value='Update')
            a(href='/') Home

listing.js中的Update方法(我根本不改):

      exports.update = function(req,res){
  var conditions = {_id:req.body.id}
  , update = {
       name: req.body.name,
       noGuests: req.body.noGuests,
       price: req.body.price
     }
  , options = { multi: false };

Listing.update(conditions, update, options, callback);

  function callback (err, numAffected) {
    if(err) { throw err; }
    res.redirect('/');
  };

 }

然后当我尝试将其更改为 PUT 时....

app.js:

app.put('/editlisting/update',listing.update);

editListing.Jade:

扩展布局

block content
  div(class="container")
      ul(class="userlist")
      each listing, i in listings
        li
          h1 #{listing.name}
          form(method='put', action='update' class='regform')
            label Name:
            input(type='text', name='name', value='#{listing.name}')
            br
            label Number of Guests:
            input(type='text', name='noGuests', value='#{listing.noGuests}')
            input(type='hidden', name='id', value='#{listing._id}')
            label Price:
            input(type='text', name='price', value='#{listing.price}')
            input(type='submit', value='Update')
            a(href='/') Home

这会导致我的浏览器在我按下 "Update" 按钮时显示此错误:

4| div(class="container") 5| ul(class="userlist") > 6|每个清单,我在清单 7|李8| h1#{listing.name}9| form(method='put', action='update' class='regform') 无法读取 undefined

的 属性 'length'

它指向我的 editListing.jade 文件中的行:

   each listing, i in listings

有人知道问题出在哪里吗?

最简单的方法是覆盖方法

运行 npm 安装方法覆盖

在 body-parser 之后将其包含在您的应用程序中 像这样

var express = require('express'),
    bodyParser = require('body-parser'),
    methodOverride = require('method-override')
    app = express();


app.use(bodyParser.urlencoded({ extended: true }));
app.use(methodOverride('_method'));

然后修改你的html

 block content
  div(class="container")
      ul(class="userlist")
      each listing, i in listings
        li
          h1 #{listing.name}
          form(method='POST', action='/editlisting/update?_method=PUT' class='regform')
            label Name:
            input(type='text', name='name', value='#{listing.name}')
            br
            label Number of Guests:
            input(type='text', name='noGuests', value='#{listing.noGuests}')
            input(type='hidden', name='id', value='#{listing._id}')
            label Price:
            input(type='text', name='price', value='#{listing.price}')
            input(type='submit', value='Update')
            a(href='/') Home

然后你就可以使用

app.put('/editlisting/update',listing.update);