繁体   English   中英

Node.js Express:重定向或在帖子上渲染

[英]Node.js Express: Redirect or render on post

我有一条张贴路线,看起来像这样:

router.post('/:name/book', function(req, res){
    Booking.create(myNewBooking, function(err, booking){
        if(err){ return next(err); }

        //What am I supposed to do here? I usually do:
        req.app.locals.booking = booking;
        res.render('booking_success.jade');
    });
});

问题:如果用户在执行此发布请求后刷新,他们将再次发送相同的数据。 我不希望那样。 预防这种情况的最佳方法是什么? 我想到了这一点:

router.post('/:name/book', function(req, res){
    Booking.create(myNewBooking, function(err, booking){
        if(err){ return next(err); }

        res.redirect('/booking-success');
    });
});

router.get('/booking-success', function(req, res){
    res.render('booking_success.jade');
});

这是要走的路吗? 还是有更好的方法来做到这一点?

这两个选项都是定期进行的。 在渲染上选择重定向的原因纯粹是基于您希望在发布之后发生的事情。

如果这是某个外部脚本(通过Ajax的Javascript或任何外部代理)调用的API,那么您应该仅呈现可接受的(可能很小)响应,通常是简单的JSON。

如果这是来自浏览器网页的表单提交,并且您希望浏览器中的URL结尾于与呈现的内容匹配的内容,则重定向非常有意义。

如果这是表单提交,则这两个选项都会从浏览器中清除表单,并防止简单地重新发布相同的数据。

尽管您可以使用这两种方法,但是在上述情况下,您不需要先执行res.redirect()然后再执行res.render()您可以直接从第一条路线本身直接执行res.render()

如果您具有可以直接或通过重定向命中的路由,从而不必在两个地方再次实现相同的逻辑,则res.redirect()很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM