请帮助我,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ı
您有几个选择。 第一:您使用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
首先在主机面板上设置变量:
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
})
}))