javascript - 难以将快速 session 变量实现为数组

标签 javascript node.js express

尝试在这里探索 Express。我正在使用express-session模块,当我使用对象或字符串的 session 变量时,我没有遇到任何问题。但是,我似乎无法让数组工作。我正在使用购物车技术作为实验老鼠。这是导致我出现问题的代码:

router.post('/', function(req, res) {
    if (req.body.action == 'Add to Cart') {
        var cart = req.session.cart = [];       
        cart.push(req.body.itemId);
        res.redirect('/');
    }
});

 router.get('/', function(req, res) {
        if (req.session.cart) {
            var itemsInCart = req.session.cart.length;
        }
        res.render('index', {
            title: 'Shopping Spree',
            itemsInCart: itemsInCart,
            products: [
                {id: 1, item: 'Boeing 747', price: 4500},
                {id: 2, item: 'Luxury Yacht', price: 200},
                {id: 3, item: 'Mercedes AMG GT', price: 15000},
                {id: 4, item: 'Apple iPhone 6', price: 2400},
                {id: 5, item: 'Moet Hennessey', price: 5000}
            ]

        });
    });

并在 View 中:index.jade:

extends layout
block content
    h2= title
    p Cart(#{itemsInCart} items) 
        a(href="/cart") [VIEW CART]

    table
        thead
            tr
                th Item
                th Price
            tr
        tbody
        - for (var i in products) {
            tr
                td= products[i].item
                td= products[i].price
                td
                    form(action="/", method="post")
                        input(type="hidden", name="itemId" value="#{products[i].id}")
                        input(type="submit", name="action", value="Add to Cart")
        - }

第一次点击“添加到购物车”按钮时,itemsInCart 确实更新为 1。后续的“添加到购物车”点击不会更新该值。

请指教。

最佳答案

使用此行

var cart = req.session.cart = [];  

每次调用时,都会将 req.session.cart 的内容重新定义为 []。

尝试一下:

var cart = req.session.cart || [];  

它将保留购物车的现有值(value),并且您不会丢失以前的商品

更新

对于更新的问题,您可以执行以下操作来保持 Jade 的绑定(bind)更新:

var pageScope;

router.post('/', function (req, res) {
    if (req.body.action == 'Add to Cart') {
        var cart = req.session.cart = [];
        cart.push(req.body.itemId);
        pageScope.itemsInCart = req.session.cart && req.session.cart;
        res.redirect('/');
    }
});

router.get('/', function (req, res) {
    pageScope.itemsInCart = req.session.cart && req.session.cart;
    res.render('index', pageScope = {
       //...
    });
});

想法是更新itemsInCart,每次都会增加cart数组的长度。

关于javascript - 难以将快速 session 变量实现为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178939/

相关文章:

node.js - 测试 Mocha 中的预期超时

node.js - TypeScript Node 服务器设置。如何删除 dist 文件夹中的所有 *.d.ts 文件?

javascript - 无法回滚 Sequelize 事务

node.js - Node+MongoDB - 错误 : process. nextTick(function() { throw err; });

node.js - 如何通过 Socket.io 和 Express 使用集群

javascript - Expressjs 无法检测响应

javascript - 扩展 React.js 组件

javascript - 如何在 Nativescript 中实现 Java 方法?

javascript - 市场 ://not supported, 尽管有 Android 文档

javascript - 如何从其 Div id 获取 Ace Editor 对象