我用Express.JS提供静态内容:Express.JS:将cookie来静态地提供内容
express.use(express.static('./../'));
当index.html
供应,我想送一个cookie旁边,表示用户是响应是否登录。通常应该使用res.cookie()
,但我无法看到如何将其用于静态提供的内容。
我用Express.JS提供静态内容:Express.JS:将cookie来静态地提供内容
express.use(express.static('./../'));
当index.html
供应,我想送一个cookie旁边,表示用户是响应是否登录。通常应该使用res.cookie()
,但我无法看到如何将其用于静态提供的内容。
不确定为什么你需要这样做,但是你可以在static
模块之前放置你自己的中间件。
下面的快速黑客应该工作:在中间件快递链
function attach_cookie(url, cookie, value) {
return function(req, res, next) {
if (req.url == url) {
res.cookie(cookie, value);
}
next();
}
}
app.configure(function(){
app.use(attach_cookie('/index.html', 'mycookie', 'value'));
app.use(express.static(path.join(__dirname, 'public')));
});
上述插入另一个函数使用前的static
中间件。如果URL与您正在查找的特定URL匹配,则新图层会将cookie附加到响应中,并将响应传递到链中。
还采取下列措施考虑:
如果你的快递是背后的Web服务器可以提供静态文件,而不会打扰明确 - 它应该是比通过中间件更快。如果你使用nginx,这可以帮助:Nginx Reverse Proxying to Node.js with Rewrite。
假设您的静态文件有它的JavaScript,你也可以直接设置cookie在客户端只请求表示你需要为这个cookie中的数据:
document.cookie = "user_id=" + user_id;
弗拉纳根的JS权威指南(版6)对于如何在客户端JavaScript中使用cookie有很好的覆盖率(除了在JavaScript books之间是最好的:)。
它可以是一个简单的建议,但我已经看到下面的流程(不止一次):客户端发送API请求(其中有连接到它,显然是一个cookie),服务器从cookie获取数据和提供完全基于此Cookie中包含的数据的响应。所有这些,而不是只是在客户端静静地阅读这个cookie。基本上客户端询问服务器它在自己的cookie中有什么。
在你的场景中,你只需要一次请求user_id/access_key,然后总是检查客户端中的cookie,去服务器仅处理客户端尚未拥有的数据,但存储并检查会话状态,也许,在本地Cookie中的大多数页面中使用的一些压缩数据(如用户名,例如)可以缓存数据(甚至可以进一步减少服务器负载)。在这种情况下,express甚至不会知道用户是否意外刷新页面(当然,如果您不更改URL以反映应用程序状态,或者仅更改#部分)。
''''静态'''有一个错字:) – esp