express.cookieSession() 不在 cookie 中保存数据

express.cookieSession() not saving data in the cookies

我正在使用 parse.com 动态网站来构建产品网站。我想使用会话 cookie 在 bowser 会话 cookie 中存储一些数据。这是我的 app.js

var express = require('express');
var parseExpressHttpsRedirect = require('parse-express-https-redirect');
var parseExpressCookieSession = require('parse-express-cookie-session');
var app = express();

// Global app configuration section
app.set('views', 'cloud/views');  
app.set('view engine', 'ejs');    

app.use(parseExpressHttpsRedirect());
app.use(express.bodyParser());    
app.use(express.cookieParser('YOUR_SIGNING_SECRET'));
app.use(parseExpressCookieSession({
    cookie : {
        maxAge : 3600000
    }
}));

app.use(express.cookieSession());
app.use(app.router);

我在 app.js 中有这个方法,它应该返回购物车中添加的项目

function getProductsInCart(req) {
    var productsInCart = req.session.productsInCart;

    if(!productsInCart) {
        return [];
    }

    return productsInCart;
}

这是在购物车中添加新产品的方法

app.get('/add-cart/*', function(req, res) {    
    var url = req.url;
    var productId = url.split('/')[2];

    var productsInCart = getProductsInCart(req);
    productsInCart.push(productId)

    req.session.productsInCart = productsInCart;
    console.log("productsInCart: " + JSON.stringify(productsInCart));    
});

我面临的问题是 getProductsInCart 方法总是 returns 一个空数组,这意味着会话没有将对象存储在 cookie 中。这应该很简单,我不明白为什么它不起作用。任何指针将不胜感激。

有两件事我做错了

  1. 使用 req.session 代替 req.cookies
  2. 将 cookie 用作普通 java 脚本对象。

这是有效的代码

app.get('/add-cart/*', function(req, res) {
    var url = req.url;
    var productId = url.split('/')[2];

    var productsInCart = getProductsInCart(req);
    console.log("productsInCart: " + JSON.stringify(productsInCart));

    productsInCart.push(productId);
    res.cookie('productsInCart', productsInCart, {
        signed: false,
        expires: new Date(Date.now() + 1000000)
    });

    res.send(req.cookies);
});

function getProductsInCart(req) {
    var productsInCart = req.cookies.productsInCart;

    if(!productsInCart) {
        return [];
    }

    return productsInCart;
}