Express.JS:将cookie附加到静态服务的内容

时间:2013-01-15 17:40:38

标签: javascript node.js express

我使用Express.JS来提供静态内容:

express.use(express.static('./../'));

index.html投放时,我希望在响应旁边发送一个Cookie,指示用户是否已登录。通常应该使用res.cookie()但我无法看到如何将其用于静态服务的内容。

2 个答案:

答案 0 :(得分:0)

还要考虑以下方法:

  1. 如果您的快递在Web服务器后面,您可以在不打扰快递的情况下提供静态文件 - 它应该比通过中间件更快。如果您使用nginx,这可以提供帮助:Nginx Reverse Proxying to Node.js with Rewrite

  2. 假设您的静态文件中包含javascript,您还可以直接在客户端设置cookie,仅请求表达此cookie所需的数据:

    document.cookie = "user_id=" + user_id;
    

    Flanagan的JS权威指南(第6版!)对如何在客户端javascript中使用cookie进行了很好的报道(除了JavaScript books中最好的:) :.

  3. 这可能是一个简单的建议,但我已经看到以下流程(不止一次):客户端发送API请求(显然附有cookie),服务器从cookie获取数据并完全响应基于此cookie中包含的数据构建。所有这一切,而不是只是在客户端安静地阅读这个cookie。基本上,客户端会询问服务器在其自己的cookie中拥有的内容。

    在您的场景中,您只需要请求user_id / access_key一次,然后始终检查客户端中的cookie,仅针对客户端尚未拥有的数据访问服务器,但是存储和检查会话状态, ,本地cookie中大多数页面中使用的一些紧凑数据(例如用户名,例如用户名)(您也可以在本地存储中缓存数据,以进一步减少服务器负载)。在这种情况下,express甚至不会知道用户是否意外刷新了页面(如果您不更改URL以反映应用程序状态,当然,或只更改#-part)。

答案 1 :(得分:0)

自从Express.js v4起,app.configure是removed,所以我想进行更新。

对于Express.js版本> 4,通过在app方法内传递选项来初始化我的express.static(root, [options]),在该方法中,您可以在名为{{3 }}:

Set-Cookie

设置app.use(express.static(publicPath, { setHeaders: function (res, path, stat) { res.set('Set-Cookie', "myCookie=cookieValue;Path=/") } })); 很重要,因为否则express会在客户端创建大量Cookie重复项。

相关问题