【问题标题】:Express.js don't set cookies on production serverExpress.js 不在生产服务器上设置 cookie
【发布时间】:2018-02-20 23:33:32
【问题描述】:

我在 server.js 脚本中遇到了问题。这是 server.js 代码:

require('dotenv').config();

const express = require('express');
const app = express();
const appPort = process.env.APP_PORT;

app.get('/', (req, res) => {

    var campaign = req.query.campaign;
    var click = req.query.param1;

    if (campaign !== undefined && click !== undefined)
    {
        res.cookie('campaign', campaign, { maxAge: 86400 * 1000 });
        res.cookie('click', click, { maxAge: 86400 * 1000 });
    }
    res.sendFile(__dirname + '/dist/index.html');
});

app.get('/members', (req, res) => res.sendFile(__dirname + '/dist/members.html'));

app.post('/members', function (req, res) {
    res.cookie('firstName', req.body.firstname);
    res.cookie('email', req.body.email);

    res.sendFile(__dirname + '/dist/members.html');
});

app.listen(appPort, () => console.log(`App is running on ${appPort} port`));
app.use(express.static('dist')); 

当下一个请求到达服务器时,我必须设置 cookie:

http://example.com/?campaign=28&param1=c4324

在我的本地主机上一切正常,但是当我将所有更改传输到生产服务器时,除了 cookie 之外,所有更改都可以正常工作,女巫不要保存在 app.get('/', (req, res)。在其他地方(例如:app.get('/members') 一切正常。请帮助我。

【问题讨论】:

  • 您使用的是哪个生产服务器?
  • Digitalocean 8 GB 内存/30 GB 磁盘/FRA1 - Ubuntu 16.04.3 x64
  • Nginx?如果是,您可能想要执行以下操作:add_header Set-Cookie "cip=$remote_addr;Domain=example.com;Path=/;Max-Age=100000";
  • 想补充一些解释。 cookie 不会在 app.get('/', (req, res){} 操作中保存。在其他地方 (app.get('/members')) 都可以正常工作。

标签: javascript node.js express cookies


【解决方案1】:

问题在于操作系统配置,更准确地说是访问权限。 我使用 digitalocean 服务,在那里我设置了 Ubuntu、Apache 和其他人员。当我的应用程序尝试创建 cookie 时,Ubuntu 不允许 Apache 默认用户创建它。当我允许 Apache 用户在我的应用程序目录中写入新文件时,问题就解决了。

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    相关资源
    最近更新 更多