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

use POST to retrieve specified item from DB

本文关键字:项目 检索 POST DB 使用      更新时间:2023-09-26

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

我完成了,我的流程是正确的,但我唯一担心的是url不好,比如localhost:8000/books/update/33434050348984585646

如何隐藏url?在我的情况下如何使用POST?

从路线定义中删除: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>

另一种选择是使用众所周知的POST/Redirect/GET模式(其优点是可以防止双重POST)。

其优点是,您不必使用URL参数(这很可能会对安全性产生影响),也不必处理隐藏的表单字段。

所以你像往常一样收到POST,在处理完参数后,你会向客户端发送一条重定向消息,代码为302 "Found",或者(首选)为303 "See Other"和你想要重定向的URL。而发送302可能会导致客户端使用GET而不是原始请求方法来调用你重定向到的URL(通常是这样),303代码明确指示客户端使用GET而不管原始请求方法是什么。