2016-06-14 55 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); 
    }); 
}); 

我如何可以將用戶投入的文件擴展名這條道路?

回答

0

你可以提供一個custom regular expression匹配命名參數,也可以包含文件擴展名:

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

對於URL路徑/snapshots/575fe038a84ca8e42f2372da.pngreq.params.shotID575fe038a84ca8e42f2372da

如果你想有和沒有.png同時匹配,你可以使用這個:

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