我正在尝试执行put请求来更新用户模型,但我的路由器只是发送另一个get请求。
这是我的路由器
router.get('/update', isLoggedIn, function(req, res) {
res.render('update.ejs', {
user : req.user // get the user out of session and pass to template
});
});
router.put('/update', function(req, res) {
var username = req.body.username;
var profile_type = req.body.prof_type;
var pic = req.body.profile_pic;
var aboutme = req.body.whoami;
console.log(req.body.whoami);
User.findById(req.params.id,function(err, userup){
if (!userup)
return next(new Error("Couldn't load user"));
else {
userup.username = username;
userup.prof_type = profile_type;
userup.profile_pic = pic;
userup.whoami = aboutme;
userup.save(function(err) {
if (err)
console.log('error on update');
else
console.log('successful update');
});
}
});
res.redirect('/profile');
});
这是我的html输入表单
<form action="/update" method="put">
<div class="form-group">
<label>Username</label>
<input type="text" class="form-control" name="username">
</div>
<div class="form-group">
<h2> Pick a type of profile</h2>
<input type="radio" class="form-control" name="prof_type" value="true">Tutor<br>
<input type="radio" class="form-control" name="prof_type" value="false">Student
</div>
<div class="form-group">
<label>Link to profile picture</label>
<input type="text" class="form-control" name="profilepic">
</div>
<div class="form-group">
<label>About me</label>
<textarea name="whoami" class="form-control">Enter text here </textarea>
</div>
<button type="submit" class="btn btn-warning btn-lg">Update</button>
</form>
我也尝试将它们更改为/ update /:username,但是,点击带有字段的更新按钮后,我获取此地址
http://localhost:3000/update?username=bob&prof_type=false&profilepic=bob&whoami=bob
不确定我为什么不更新模型,甚至不知道为什么不更新。非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
HTML仅支持GET
和POST
次请求。有关详细信息,请参阅specification:
方法和formmethod内容属性是枚举属性 使用以下关键字和状态:
关键字get,映射到状态GET,表示HTTP GET 方法。关键字post,映射到状态POST,表示 HTTP POST方法。这些属性的默认值无效 GET状态。 method属性的缺省值default是 也是GET状态。 (默认没有缺失值 formmethod属性。)
您只能将PUT
方法用于ajax请求。例如,在jQuery中:
$.ajax({
url: '/update',
type: 'PUT',
success: function(result) {
// Do something with the result
}
});