2017-07-06 3 views
0

私のexpressディレクトリの "public"ディレクトリに何かを置くといつでも、私の好きなWebページに自動的にリンクがあります。たとえば、https://website.com/image.jpgに行くと画像をダウンロードでき、https://website.com/object.jsonは私のパブリックフォルダ内にこれらのファイルを置く以外に何もしなくてもJSONファイルをダウンロードできます。これは非常に便利です。何かを変えるたびにサーバ上で名前で指定したくないさまざまなものを作ってしまう別のスクリプトがあるためです。エクスプレス4.0パブリックフォルダからのファイルを、拡張子に基づいてフォーマットされたHTMLではなくファイルとして提供する方法は?例えば。 JSON形式、画像を表示

私がしたいのは、画像を取得したいときに自動的にダウンロードするのではなく、ブラウザに表示するようにこのserveコマンドを変更することです。これは、末尾に.pngファイルがあるパブリックフォルダ内に何かの周りに<html> </html>を追加するだけで簡単にできます。同様に、JSONファイルが文字列化され、読みやすい形式(JSON.stringify(object、null、2))で出力されるようにしたいと思います。

基本的には、自分のパブリックフォルダに何かを置き、ファイル拡張子に基づいて自動的に望ましい方法でアクセスできるようにしたいと考えています。これらの2つのケースでは、「望ましい」方法はファイルをダウンロードするのではなく、ブラウザーで人にやさしい形式で表示することです。

答えて

0

nodejsに静的ファイルを表示するのは簡単な動作ではありません。あなたは通常、パブリックになる静的なフォルダを設定し、URLのフラグメントの終わりはファイル名と同じになります。 NodejsでExpressを使用すると、次のようになります。

app.use(express.static(path.join('.', 'public'))); 

デフォルトの実装を好きではないので、あなたではなく、手動でURLを解析することができ、その名前のファイルが存在するかどうかを確認、適切なHTMLのまわりでそれをラップし、その応答としてそれを投げます。

var fs = require('fs'); 
app.use(function(req, res, next){ 
    fileName = req.url.substring('https://website.com/'.length); 
    if(fs.existsSync('public/'+fileName){ 
     if(fileName.substring(fileName.lastIndexOf('.')+1)=='jpg') 
      res.send('<html><body><img src="public/'+fileName+'"></img></body></html>') 
}) 

ご覧のとおり、すべてのURLでファイルが確認されます。すべてのパブリックファイルを '/ public'のようなサブディレクトリに置いてルータを使用することもできます

関連する問題