0

我有一个 .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 的动态 url:

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)

有任何想法吗?

4

1 回答 1

0

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

    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

第二个已解决,如该线程中所述:

res.download(path.resolve("public/files/" + req.params.file));
于 2014-07-05T08:53:19.700 回答