Node.js 快速cookie会话在POST请求中不持久

Node.js 快速cookie会话在POST请求中不持久,node.js,session,cookies,express,Node.js,Session,Cookies,Express,我有一个AngularJS客户端使用$http()函数将POST表单数据发送到Express服务器。我希望服务器在客户端中设置一个cookie,保存用户的电子邮件地址。这就是我存储的全部内容,因此我不需要更强大的服务器端会话。我只是在使用cookie会话模块 问题:cookie未在客户端持久化。来自同一客户机的后续请求显示一个空会话变量 在设置cookie之后,我已经看到并正在使用req.session.save(),但它仍然不起作用 服务器代码: // server.js var expre

我有一个AngularJS客户端使用
$http()
函数将POST表单数据发送到Express服务器。我希望服务器在客户端中设置一个cookie,保存用户的电子邮件地址。这就是我存储的全部内容,因此我不需要更强大的服务器端会话。我只是在使用
cookie会话
模块

问题:cookie未在客户端持久化。来自同一客户机的后续请求显示一个空会话变量

在设置cookie之后,我已经看到并正在使用
req.session.save()
,但它仍然不起作用

服务器代码:

// server.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var cookieSession = require('cookie-session')
var methodOverride = require('method-override');

// Configuration
app.use(bodyParser.urlencoded({'extended':'true'}));
app.use(bodyParser.json());
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
app.use(methodOverride('X-HTTP-Method-Override'));

var express = require('express');
var app = express();

// Cookies
app.use(cookieParser());

app.use(cookieSession({
    name: 'session', // what should this name match?
    resave: true,
    saveUninitialized: true,
    keys: ['key1', 'key2']  // what do these values need to match?
}));

app.use(function(req, res, next) {
    // Create a cookie.
    console.log("Session user [before set]: %j", req.session);
    req.session.mycookie = "sample data"; // simplified example for illustration
    console.log("Session user [after set]: %j", req.session);
    // Save session cookie
    req.session.save();
});

app.listen(3000);
来自同一客户机的每个请求都会给出以下输出:

Session user [before set]: {}
Session user [after set]: {"mycookie":"sample data"}
客户端的后续测试显示cookie没有持久化。我甚至使用Firefox的“查看Cookies”插件来检查是否创建了Cookies,以及是否没有创建Cookies

1。为什么我的饼干不持久?我刚接触Express,所以可能会错过一些明显的东西


2。我是否使用了正确的参数来创建cookieSession?我不确定什么是
名称
。这个问题的答案很模糊,我在别处找不到更好的文档。

结果证明解决方案很简单!我现在意识到,我需要在浏览器对服务器的初始请求中包含端口号(我确实在JavaScript代码中包含了端口号)

即使没有端口号,浏览器也可以获得初始请求,因为同一台机器上的另一个web服务器(不是我的Express服务器)正在为该请求提供服务

只需将端口号添加到浏览器的地址栏即可。当然,然后我需要在服务器上添加另一个Express route来处理站点的默认页面。在这之后,cookies就如预期的那样工作了


希望这个答案能帮助其他Express新手。

结果证明解决方案很简单!我现在意识到,我需要在浏览器对服务器的初始请求中包含端口号(我确实在JavaScript代码中包含了端口号)

即使没有端口号,浏览器也可以获得初始请求,因为同一台机器上的另一个web服务器(不是我的Express服务器)正在为该请求提供服务

只需将端口号添加到浏览器的地址栏即可。当然,然后我需要在服务器上添加另一个Express route来处理站点的默认页面。在这之后,cookies就如预期的那样工作了

希望这个答案能帮助其他Express新手