【问题标题】:node res.render changes view but not url节点 res.render 更改视图但不更改 url
【发布时间】:2017-01-29 22:26:45
【问题描述】:

我从jade view 向其controller(后端)发送id,然后控制器查询mongodb,并将结果发送到新的jade view-angular。 结果和视图出现但URL 保持不变(上一个视图),因此如果我F5 当前视图,它会重新加载上一个视图。
所以路线是:view->node->angular
想法?

jade 启动器视图

form(method="post")
    input(type="hidden" name="id" value=cart._id)
    input(type='hidden', name='_csrf', value=_csrf)
    button.btn.product.btn-primary(type='submit', id=cart._id class='')

控制器

exports.pushCart = (req, res) => {

if (passport.isAuthenticated) {

    Order.findOne({ _id: req.body.id})
        .select('-_id productOrder')
        .exec(function (err, orderObj) {
            if(!err) {
                var productOrder = orderObj.productOrder;

                res.render('store/cart', {
                    title: 'MyCart',
                    angularApp: 'storeApp',
                    products: productOrder
                });
            }
        });

} else {
    res.redirect('/login');
}
};

Mongoose populate subdoc

【问题讨论】:

  • 如果你想改变 URL,你必须使用res.redirect('/some/path')
  • @idbehold,在这种情况下,res.render() 将渲染视图并传递给它的数据,res.redirect() 会将用户重定向到另一个页面(此时请求重新开始)跨度>
  • 是的,没错。您可以呈现视图以响应 POST 请求(浏览器中的 URL 将保持不变),或者您可以重定向这将更改浏览器中的 URL。您不能从服务器端同时执行这两项操作。
  • 您可以(在客户端)使用 HTML5 History API 在页面加载时自动更改 URL。但是你不能完全用服务器端的节点来完成你想要的。
  • @idbehold,这是我的问题

标签: angularjs node.js mongodb express pug


【解决方案1】:

如果你想改变 URL,你需要重定向 像这样

 res.redirect('/some/path') 

【讨论】:

    【解决方案2】:

    如果您想在更改 URL 时传递信息,则必须使用 session 来在页面之间传输数据。

    connect-flash 非常流行与护照一起用于临时会话数据传输。

    res.redirect('/store/card') 应该用于更改 URL,但它不接受要传递的对象。这就是我们使用 session 来传递信息的原因。

    你的代码应该是这样的;

    app.post('/yourPostURL', function(req, res){
      // Auth and validate here, then
      // Set a flash message by passing the key, followed by the value, to req.flash().
      req.flash('success', 'Put anything here')
      res.redirect('/store/card');
    });
    
    app.get('/store/card', function(req, res){
      // Get an array of flash messages by passing the key to req.flash()
      res.render('store/card', { messages: req.flash('success') });
    });
    

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 2017-04-14
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      相关资源
      最近更新 更多