2014-07-04 113 views
0

我有一个.gz文件位于/public/files/update.tar.gz。我想通过路线/ud/files/update.tar.gz为其下载。我想做它作为静态内容和路由(因为一些文件将有一个动态生成的路线)。nodejs服务预压缩的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) 

并在/动态URL UD /文件/ 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); 
    } 
    }); 
}); 

在这里,我得到两个错误toghether:

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

任何想法?

回答

0

好的,找到了解决方案:第一个是配置问题,因为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)); 
+0

你为什么要用nginx和nodejs?两种(nodejs在某些情况下可能会更好)完成同样的事情。 – Eduard

+0

我发现nginx做的事情更简单:平衡,服务Apache,静态和nodejs应用程序,HTML缓存,日志记录...所以你不必在node中实现所有这些东西,只需配置nginx :) – Miquel