使用POST从DB中检索指定的项目

时间:2015-12-25 14:52:51

标签: javascript node.js mongodb

想象一下这个场景,我想更新一本书的细节。所以我应该有那本书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?

2 个答案:

答案 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,无论如何原始请求方法是什么。