nodejs提供预压缩的gz文件

时间:2014-07-04 20:41:32

标签: node.js express static-content

我的.gz文件位于/public/files/update.tar.gz。我想使用路线/ud/files/update.tar.gz进行下载。我想将它作为静态内容和路由(因为一些文件将具有动态生成的路由)。

我已经尝试了以下静态(实际上用nginx实现可能更好):

main.use('/ud/files', express.static(path.join(__dirname, 'public/files')));

我收到错误:

Error: No default engine was specified and no extension was provided. at new View (bla bla)

对于/ud/files/tX2r8z/update.tar.gz中的动态网址:

router.get('/ud/files/:s/:file', function(req, res) {
  checkSg(req.params.s, function(err) {
    if(!err) {
      res.download("/public/files/" + req.params.file, req.params.file); 'also tried sendFile()
    } else {
      res.send(404);
    }
   });
});

这里我得到两个错误:

Error: Forbidden at SendStream.error  (bla bla)
Error: No default engine was specified and no extension was provided. at new View (bla bla)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,找到了解决方案:第一个是配置问题,因为nginx正在重写路径以便为文件本身提供服务(现在我想知道为什么它不是由nginx和nginx提供服务的请求已发送到节点...):

    location ~ ^/(ud\/files)/ {
        rewrite ^/ud\/files(/.*)$ $1 last;
        root /mnt/data/public/files;
        gzip_static on;
        add_header Cache-Control public;
    }

    location / {
        proxy_pass   http://127.0.0.1:3000;
    }

所以节点看到了GET /updates.tar.gz

第二个问题已按this thread中所述解决:

res.download(path.resolve("public/files/" + req.params.file));