想象一下这个场景,我想更新一本书的细节。所以我应该有那本书ID,我喜欢这个
router.get('/edit/:book_id', function(req, res) {
Products.getBookById(req.params.book_id, function(err,product){
//render
});
});
<a href="edit/3434050348984585646">update this book</a>
我已经完成了,我的流量是正确的,但我唯一关心的是网址不好,比如localhost:8000 / books / update / 3434050348984585646
我该如何隐藏网址?如何在我的情况下使用POST?
答案 0 :(得分:1)
从路线定义中移除:bookId
,然后将链接更改为表单:
JS
router.get('/edit', function(req, res) {
Products.getBookById(req.params.book_id, function(err,product){
//render
});
});
HTML
<form action="edit" method="post">
<input type="hidden" name="book_id" value="3434050348984585646">
<input type="submit" value="Update this book">
</form>
答案 1 :(得分:0)
另一个选择是使用众所周知的POST/Redirect/GET pattern(它具有防止双重POST的优势)。
优点是您不必使用URL参数(可能会产生安全影响)或必须处理隐藏的表单字段。
因此您照常接收POST,并在处理完参数后,向客户端发送重定向消息,代码为302 "Found"
或(首选)303 "See Other"
和URL你想重定向到。虽然发送302 可能导致客户端使用GET而不是原始请求方法来调用您重定向到的URL(通常是这样),但303代码明确指示客户端使用GET,无论如何原始请求方法是什么。