Node.js Express session会在每次页面加载时创建一个新会话

Node.js Express session会在每次页面加载时创建一个新会话,node.js,reactjs,express,axios,express-session,Node.js,Reactjs,Express,Axios,Express Session,我有一个带有express session的MERN web应用程序,我正试图将其部署到heroku。通过在package.json文件中设置代理,我使用代理配置了后端请求。当前端和后端都在本地主机上运行时,它会正常工作 当我将后端部署到heroku时,每次浏览器刷新后,express session都会在mongodb中创建一个新的会话/文档 经过大量调试,发现将axios.defaults.baseURL设置为后端url是导致问题的原因。我还是不知道为什么 显然,在package.json中

我有一个带有express session的MERN web应用程序,我正试图将其部署到heroku。通过在package.json文件中设置代理,我使用代理配置了后端请求。当前端和后端都在本地主机上运行时,它会正常工作

当我将后端部署到heroku时,每次浏览器刷新后,express session都会在mongodb中创建一个新的会话/文档

经过大量调试,发现将axios.defaults.baseURL设置为后端url是导致问题的原因。我还是不知道为什么

显然,在package.json中设置代理只能用于开发,因为当我部署应用程序时,会从前端url调用api。因此,在开发过程中,当所有内容都在localhost上运行,并且在package.json中设置了代理时,所有内容都可以正常工作

问题是,当我设置axios.defaults.baseURL时。当我这样做时,在每次重新加载页面之后,会话都会被重新创建

连接前端和后端的正确方法是什么

Session.js

Route.js

express会话的工作方式是,它在本地保存引用cookie,当您发送请求时,无论是get、post、put还是delete,该请求都会将该cookie ref与请求一起发送到后端。然后,Express session会看到cookie ref,并从数据存储中获取相应的数据,以便您可以在应用程序中使用它

设置axios.defaults.baseURL时,cookie不会从本地系统发送到后端。发送的方式是通过设置:

axios.defaults.withCredentials = true;
这样可以确保饼干送过来。一旦你设置了,你就必须用CORS设置一个特定的原点,你不能使用“*”

module.exports = function(app) {
    app.use(cors());
    app.use(helmet());
    require('../middleware/session')(app);
    // Other routes...
};
axios.defaults.withCredentials = true;