【问题标题】:cookie doesn't get sent on first request第一次请求时未发送 cookie
【发布时间】:2016-01-29 15:50:38
【问题描述】:

我的 server.js express 应用程序上有以下代码:

var express = require('express');
var fallback = require('express-history-api-fallback');
var compress = require('compression');
var favicon = require('serve-favicon');
var prerenderio = require('prerender-node');
var config = require('getconfig');

var app = express();

app.use(function (req, res, next) {
    if (config.environment !== 'local') {
        res.cookie('config', JSON.stringify(config), { secure: true });
    }
    else {
        res.cookie('config', JSON.stringify(config));
    }
    next();
});

app.get('/versioncheck', function(req, res) {
    return res.json({ version: config.version });
});

app.use(compress());
app.use(prerenderio.set('prerenderToken', config.prerender_token).set('protocol', 'https'));
app.use(express.static(__dirname, { maxAge: 31536000 }));
app.use(favicon(__dirname + '/favicon.ico'));
app.use(fallback('index.html', { root: __dirname }));

const PORT = process.env.PORT || 1010;

app.listen(PORT, function () {
    console.log('Server started on port %s', PORT);
});

我使用 express 设置的第一个中间件非常简单:它将带有一些配置信息的 cookie 发送到客户端。我面临的问题是这个 cookie 在第一次请求时不会被发送到客户端。对于所有后续请求,它确实可以正常工作。我错过了什么?

【问题讨论】:

    标签: javascript node.js express cookies middleware


    【解决方案1】:

    前段时间我也遇到过类似的问题。

    在第一个请求开始时,cookie 不存在。

    cookie 在请求期间发送,而不是之前发送。

    因此,在第二个请求开始时,设置了 cookie(从请求 1 开始)。

    【讨论】:

    • 我明白你的意思,但换句话说,你是说我永远无法从服务器获取 cookie 并在第一个请求中在客户端读取它?
    • 这就是我想指出的。也许您可以在 html 标头中添加标签,或者在 url 中使用 # 标签。
    • 我仍在对此进行更多调查。奇怪的是,如果我第一次请求 mysite.com,他的 cookie 没有设置。但是,如果我也是第一次请求 mysite.com/foo,cookie 就会被设置。
    • 我知道,应该没什么区别,但是试试app.use("*", function (req, res, next) {
    • 这并没有成功...我已经更改了一些东西并且似乎已经修复了它。在发布答案之前会监控我的应用。
    猜你喜欢
    • 2015-11-06
    • 2020-08-19
    • 2021-05-29
    • 2012-11-28
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多