【发布时间】:2019-11-04 19:21:21
【问题描述】:
我有一个带有express-session 的 MERN 网络应用程序,我正试图将其部署到 heroku。通过在package.json 文件中设置代理,我使用代理配置了后端请求。当前端和后端都在 localhost 上本地运行时,它可以正常工作。
当我将后端部署到 heroku 时,每次浏览器刷新后,express-session 都会在 mongodb 中创建一个新的会话/文档。
经过大量调试,发现将 axios.defaults.baseURL 设置为后端 url 是导致问题的原因。 (我还是不知道为什么。)
显然,在package.json 中设置代理仅适用于开发,因为当我部署应用程序时,会从前端 url 调用 api。所以在开发过程中,当一切都在 localhost 上运行,并且代理设置在 package.json 中时,一切正常。
问题是,当我设置axios.defaults.baseURL。当我这样做时,每次重新加载页面后,都会重新创建会话。
前端连接后端的正确方法是什么?
Session.js
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');
module.exports = function(app) {
var sess = {
secret: 'mySecret',
cookie: { token: null },
saveUninitialized: false,
resave: true,
store: new MongoStore({ mongooseConnection: mongoose.connection })
};
if (app.get('env') === 'production') {
app.set('trust proxy', 1);
sess.cookie.secure = true;
}
app.use(session(sess));
};
Route.js
module.exports = function(app) {
app.use(cors());
app.use(helmet());
require('../middleware/session')(app);
// Other routes...
};
【问题讨论】:
标签: node.js reactjs express axios express-session