2016-06-14 8 views
0

私のExpressアプリケーションでは、詳細をMongoDBに保存するスナップショットを作成します。実際のスナップショットファイルは、スナップショットフォルダの_idに格納されます(例:/snapshots/575fe038a84ca8e42f2372da.png)。エクスプレスルートパラメータとファイル拡張子を連結します

現在、これらのスナップショットは、ブラウザのフォルダとID(つまり/snapshots/575fe038a84ca8e42f2372da)に移動してイメージファイルを返すことで、ユーザーが読み込むことができます。しかし、私はより直感的なURLのパスは、ファイルの拡張子を含める必要がありますと思う;すなわち、ユーザは/snapshots/575fe038a84ca8e42f2372da.PNGにファイルを取得する必要があります。

これは私が現在持っているものです。

router.get('/:shotID', function(req, res, next) { 

    // Checks if shot exists in DB 
    Shots.findOne({ 
     _id: req.params.shotID // More conditions might get put here, e.g. user restrictions 
    }, (err, result) => { 
     if (err) { 
      res.status(404).res.end(); 
      return; 
     } 
     var file = fs.createReadStream(`./snapshots/${req.params.shotID}.png`); 

     file.pipe(res); 
    }); 
}); 

どのように私は、このパスにファイルの拡張子を入れてユーザーを取り込むことができますか?あなたはまた、ファイルの拡張子を含めることができますという名前のパラメータ、一致するcustom regular expressionを提供することができます

答えて

0

:URLパス/snapshots/575fe038a84ca8e42f2372da.pngについて

router.get('/:shotID(?:([a-fA-F0-9]{24})\.png$)', ...); 

を、req.params.shotID575fe038a84ca8e42f2372daになります。あなたとし、.pngなしの両方を一致させたい場合は

、あなたはこれを使用することができます。

router.get('/:shotID(?:([a-f0-9]{24})(?:\.png)?$)', ...); 
関連する問題