在节点中使用ETag作为静态内容

时间:2014-02-19 10:39:12

标签: javascript node.js http etag

我目前正在使用一段非常简单的代码来返回node.js中静态内容的请求:

function staticRequest(req, res) {

    var toRetr = STATIC_DIR + req.params[0];

    if (fs.existsSync(toRetr)) {
        res.sendfile(toRetr);
    } else {
        res.status(404).send('Not found: ' + req.params[0]);
    }

};

我想使用ETag来最小化客户端和服务器之间的冗余流量。

  1. 如何实施或启用此功能?
  2. 我应该在服务器端实现内存缓存吗?

3 个答案:

答案 0 :(得分:0)

我建议这样的事情:

var _myEtags = {};

function staticRequest(req, res) {
  var toRetr = STATIC_DIR + req.params[0];
  if (_myEtags[req.get('ETag')]) {
    res.sendfile(toRetr);
  } else {
    if (fs.existsSync(toRetr)) {
       _myEtags[req.get('ETag')] = true;
       res.sendfile(toRetr);
    } else {
       res.status(404).send('Not found: ' + req.params[0]);
    }
  }
};

答案 1 :(得分:0)

我使用了节点的st模块。

答案 2 :(得分:0)

通过缓存提供静态页面的节点模块很少。

https://github.com/cloudhead/node-static(Github上最受欢迎)

https://github.com/isaacs/st

https://github.com/divshot/superstatic