如何使用node.js和express.js从表单中发出和删除请求?

时间:2017-03-20 18:53:13

标签: javascript html node.js express

所以我正在尝试使用

发出一个put请求

我的表格

    <form id="for" action="/people" method="post">
        <div class="">
            <input type="text" name="Name" value=<%= data[0].name %> >
        </div>
        <div class="">
            <input type="text" name="City" value="" placeholder=<%= data[0].favorite_city %>>
        </div>

        <input type="hidden" name="_method" value="put"/>
        <input type="submit" name="" value="Edit">
    </form>

我的服务器端脚本

  var methodOverride = require('method-override');
  app.use(methodOverride('_method'));

    app.put('/people', function(req,res){
  pg.connect(DATABASE_URL, function(err, client, done){
    var pid = parseInt(req.params.id);
    var name = req.query.Name;
    var city = req.query.City;
    var client_query = '';
    if(name = ''){
      client_query = `update persons set favorite_city =${city} where id = ${pid}`;
    }
    else{
      client_query = `update persons set name = ${name}, favorite_city= ${city} where id= ${pid}`;
    }
    client.query(client_query, function(err, result){
      res.redirect(`/people/${pid}`)
      done();
      pg.end();
    })
  })
});

我正在使用方法覆盖,但它似乎只用新数据做一个帖子 问题与删除类似,所以我不打算把代码放在这里,因为它可能有点多余。但如果有人想看到它,我不介意

1 个答案:

答案 0 :(得分:0)

methodOverride('_method')返回一个中间件,用于在查询字符串中查找密钥 _method (请参阅method-override docs)。通过在表单中​​包含 _method 变量并使用POST方法发送表单, _method 不包含在查询字符串中,而是包含在请求正文中。您可能希望在methodOverride中间件之前使用正文解析器中间件,然后执行以下操作:

app.use(methodOverride(req => req.body._method));

此外,您可能希望将query替换为body

var name = req.query.Name;
var city = req.query.City;