所以我正在尝试使用
发出一个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();
})
})
});
我正在使用方法覆盖,但它似乎只用新数据做一个帖子 问题与删除类似,所以我不打算把代码放在这里,因为它可能有点多余。但如果有人想看到它,我不介意
答案 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;