2014-07-04 150 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