2017-04-21 88 views
0

我目前正在構建一個應用程序,並且有一個看起來像這樣的路由文件。express.js - 多個路由的單路由處理程序

const router = require('express').Router(); 

router.get('/', (req, res) => res.render('statics/home')); 
router.get('/jobs', (req, res) => res.render('statics/jobs')); 
router.get('/about-page', (req, res) => res.render('statics/about-page')); 
router.get('/valves', (req, res) => res.render('statics/valves')); 

router.all('*', (req, res) => res.notFound()); 

module.exports = router; 

我試圖想出一個辦法來修改我的路線,有一個不接受任何字符串中的一個路線,然後檢查文件是否存在匹配它

感謝任何幫助!

回答

0

像這樣的東西可以工作:

const router = require('express').Router(); 
const fs = require('fs'); 

router.get(':template', (req, res) => { 
    const tpl = req.param('template'); 
    if (tpl) { 
    if (fs.existsSync('/path/to/templates/' + tpl + '.ext')) { // adjust the path and template extension 
     res.render('statics/' + tpl); 
    } else { 
     res.notFound(); 
    } 
    } else { 
    res.render('statics/home'); 
    } 
}); 

router.all('*', (req, res) => res.notFound()); 

module.exports = router; 

或者可能是更好的做法是基於它的內容曾經讀過的模板目錄並創建路線:

const router = require('express').Router(); 
const fs = require('fs'); 

const templates = fs.readdirSync('/path/to/templates'); 
templates.forEach(tpl => { 
    tpl = tpl.substring(tpl.lastIndexOf('/') + 1); 
    if (tpl === 'home') { 
    router.get('/', (req, res) => res.render('statics/home')) 
    } else { 
    router.get('/' + tpl, (req, res) => res.render('statics/' + tpl)) 
    } 
}); 

router.all('*', (req, res) => res.notFound()); 

module.exports = router; 
+0

這正是我一直在尋找對於。非常感謝!我非常喜歡你發佈的第二個解決方案。今天我會試着實現這一點 –