首页 > 解决方案 > 如何在快速路由器中获取动态当前路径

问题描述

router.get('/add/:id', (req, res, next) => {
        let productId = req.params.id;
        let cart = new Cart(req.session.cart ? req.session.cart : {});
        
        cart.addByOne(productId);
        req.session.cart = cart;
        
        // the path name below should be dynamic
        res.redirect('/shopping-cart');
        res.redirect('/checkout');
    });

router.get('/shopping-cart', (req, res, next) => {
    if(!req.session.cart) {
        return res.render('shopping-cart', {products: null});
    }
    let cart = new Cart(req.session.cart);
    res.render('shopping-cart', {products: cart.generateArray(), totalPrice: cart.totalPrice});
});

router.get('/checkout', isLoggedIn, (req, res, next) => {
    if (!req.session.cart) {
      return res.redirect('/shopping-cart');
    }

    let cart = new Cart(req.session.cart);
    res.render('checkout', {products: cart.generateArray(), total: cart.totalPrice});  
});

重定向的路径名应该是动态的,这意味着如果当前本地路径名例如http://localhost:5002/shopping-cart应该是 res.redirect('/shopping-cart');

如果 localhost 名称http://localhost:5002/checkout,则应改为 res.redirect('/checkout') 等。有没有办法动态地改变它,并尽可能保持代码干净。定义了路由器以及文件 checkout.ejs 和 shopping-cart.ejs。

标签: javascriptnode.jsexpress

解决方案


let currentUrl; 

router.get('/add/:id', (req, res, next) => {
    let productId = req.params.id;
    let cart = new Cart(req.session.cart ? req.session.cart : {});

    cart.addByOne(productId);
    req.session.cart = cart;
    res.redirect(currentUrl);
});

router.get('/shopping-cart', (req, res, next) => {
    if(!req.session.cart) {
        return res.render('shopping-cart', {products: null});
    }

    currentUrl = '/shopping-cart';

    let cart = new Cart(req.session.cart);
    res.render('shopping-cart', {products: cart.generateArray(), totalPrice: cart.totalPrice});
    console.log('shopping-cart' + url);
});

router.get('/checkout', isLoggedIn, (req, res, next) => {
    if (!req.session.cart) {
      return res.redirect('/shopping-cart');
    }

    currentUrl = '/checkout';

    let cart = new Cart(req.session.cart);
    res.render('checkout', {products: cart.generateArray(), total: cart.totalPrice});  
});

通过创建一个名为 currentUrl 的全局变量,我将当前路径名存储在这里,因此每次当路由器加载时,它都会寻找一个新的更新的 currentUrl。


推荐阅读