0

に .gz ファイルがあります/public/files/update.tar.gz。route を使用してダウンロード用に提供したいと思います/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);
    }
   });
});

ここで、2 つのエラーが一緒に表示されます。

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

わかりました、解決策を見つけました: 最初の 1 つは、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

2番目のものは、このスレッドで述べられているように解決されました:

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