我的.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)
有什么想法吗?
答案 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));