javascript - 如何在快速路由器中获取动态当前路径
问题描述
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。
解决方案
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。
推荐阅读
- kotlin - 如何清除协程 Channel 发送的值?
- c# - 有没有办法中止一个线程,然后用一个新变量再次打开它?
- asp.net - 如何在不使用 jsoup 的情况下从 asp.net 页面获取数据到 android 应用程序?
- sql - 如何在 where 子句 [BigQuery] 中为数组设置条件
- c# - 如何使用另一个表单中的 ArrayList 填充组合框?
- opencv - 从内存中释放 OpenCV Mat
- google-data-studio - Google Data Studio 中字符串/数字数组的字段?
- javascript - 图像未在打印预览中呈现
- java - 如何解决数组列表中未知来源的问题?
- tableau-api - 如何使 View 更小 Tableau?