Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在没有页面重新加载的生产构建中,Sapper会话未正确设置_Javascript_Node.js_Svelte_Sapper - Fatal编程技术网

Javascript 在没有页面重新加载的生产构建中,Sapper会话未正确设置

Javascript 在没有页面重新加载的生产构建中,Sapper会话未正确设置,javascript,node.js,svelte,sapper,Javascript,Node.js,Svelte,Sapper,我正在用Sapper做一个项目,现在有点纠结于某件事——我不太明白。我将Polka用于我的服务器(它包含在模板中,所以我使用了它),将cookie会话用于我的会话中间件 这是我的波尔卡配置,我还: 当用户登录时,它会在routes/login.js中处理,本质上,一些配置文件信息和令牌会在session.user上设置,请求会重定向回根路径。我正在使用@polka/send type来响应。见下文: req.session.user = { accessToken: access_toke

我正在用Sapper做一个项目,现在有点纠结于某件事——我不太明白。我将Polka用于我的服务器(它包含在模板中,所以我使用了它),将
cookie会话
用于我的会话中间件

这是我的波尔卡配置,我还:

当用户登录时,它会在
routes/login.js
中处理,本质上,一些配置文件信息和令牌会在
session.user
上设置,请求会重定向回根路径。我正在使用
@polka/send type
来响应。见下文:

req.session.user = { 
  accessToken: access_token,
  name: first_name,
  pic: picture.data.url
};
send(res, 302, '', {
  Location: appUrl
});
在那里,我有一个用于
路由/索引的预加载模块。svelte
检查
会话。用户是否存在,如果存在,则重定向到仪表板:

<script context="module">
  export async function preload(page, session) {
    const { user } = session;

    if (user) {
      return this.redirect(302, "dashboard");
    }
   }
</script>

导出异步函数预加载(页面,会话){
const{user}=会话;
如果(用户){
返回这个。重定向(302,“仪表板”);
}
}
这一切在dev中都可以很好地工作,但是当我运行build和buildforproduction时,情况就不太好了。在
login.js
中重定向后,似乎没有填充
会话.user

我在
preload
中获得的
session
对象没有
session。用户在登录后设置了
session,注销时设置了
session,反之亦然。用户只需将
设置为null,客户端重定向到根目录,
session。用户仍在填充

如果刷新浏览器,
session.user
处于正确状态。无需刷新–如果我刚刚注销,我可以像登录一样四处点击,如果我刚刚登录,则不会发生任何事情,如
会话。用户
未定义


只是不确定为什么它可以在开发版本上工作,但不能在生产环境中工作。考虑到浏览器刷新时的
session.user
状态是正确的,我猜这不是cookie中间件配置的问题。好像我错过了什么。任何帮助都将不胜感激

对于开发和生产环境,Sapper确实以不同的方式处理缓存头。这就是为什么你会这样经历

但通过更改sapper.middleware函数有一个简单的解决方案:

    sapper.middleware({
      session: (req, res) => {
        res.setHeader('cache-control', 'no-cache, no-store')
        return { user: req.session.user }
      }
    })
这将根据需要设置缓存控件

    sapper.middleware({
      session: (req, res) => {
        res.setHeader('cache-control', 'no-cache, no-store')
        return { user: req.session.user }
      }
    })