app[web.1]:警告:connect.session() MemoryStore 不可用。Heroku 无法工作

问题描述 投票:0回答:2

请帮助我,heroku应用程序错误,这是heroku查看日志:

2020-03-25T00:13:32.809756+00:00 app[web.1]: 警告: connect.session() MemoryStore 不是 2020-03-25T00:13:32.809769+00:00 app[web.1]:专为生产环境设计,因为它会泄漏 2020-03-25T00:13:32.809770+00:00 app[web.1]:内存,并且不会扩展到单个进程。 2020-03-25T00:13:32.821438+00:00 app[web.1]: 服务器启动于8000 2020-03-25T00:13:32.958702+00:00 应用程序[web.1]:veritabanına baglandı

javascript mongodb heroku
2个回答
1
投票

您有几个选择。 第一:您使用express-session创建了一个用户会话,但忘记将会话密钥添加到heroku配置变量中的变量中 例如:

app.use(
session({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: true,

使用 process.env.SESSION_SECRET 并且不将秘密添加到 heroku vars 会给你这个错误(这是我的情况)

第二:您没有指定存储会话的位置。您应该添加一个存储系统,将会话存储到数据库中。这有助于您的应用程序管理会话。

例如,在 mongodb 中,您可以使用 connect-mongo,您应该找到一个存储包,对于其他数据库。

例如:

const session = require('express-session');
const MongoStore = require('connect-mongo')(session);

app.use(session({
    secret: 'foo',
    store: new MongoStore(options)
}));

通过这样做,您将会话存储在 mongo 中。

第三:如果全部失败,最后一个选项(我不推荐)是将 cookie 存储在客户端而不是服务器端。为此,您必须将express-session(如果您正在使用它)替换为cookie-session。

例如:

npm i cookie-session
var session = require('cookie-session');

然后像平常一样编写app.use


0
投票

首先在主机面板上设置变量:

name: SESSION_SECRET, variable: "yoursKey"

下一步是在 app.js 文件中添加以下链接:

const session = require('express-session')
const SequelizeStore = require("connect-session-sequelize")(session.Store);

设置会话和会话存储:

app.set('trust proxy', 1); // trust first proxy
app.use(cookieParser());

app.use(session({
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: true,
    cookie: {
        secure: true,
        maxAge: 1000 * 60 * 60 * 1 // 1 hours
    },
    storage: new SequelizeStore({
    db: sequelize
    })
}))
© www.soinside.com 2019 - 2024. All rights reserved.