Express.jsdynamic路由
我正在尝试使用Node.js和Express.js来制作小型CMS,我想知道什么是dynamic路由模块的最佳方法。 我可以理解一些红色文件,有些我无法理解。 什么是正确的方法来做到这一点?
如果一个用户(通常是站点pipe理员)制作一个静态页面,论坛和一些命名的模块都不一样:
- staticPage
- QnAforum
- andAnythingUserNamed
我想两种方式来路由此页面,
第一 :我认为这是理智的方式,URL是干净的,但可以减less页面加载速度。
app.get(/:module, function(req, res, next){ ... // if req.params.modules == (login || logout ...) // handle it // else if // module.find()... and render... });
第二 :如果我把模块用户分离出来,我觉得URL比较复杂,但比上面的方式更快。
app.get(/forum/:id, function(req, res, next){ ... // forum.find({forum_id: req.params.id})... }); app.get(/staticPage/:id, function(req, res, next){ ... // staticPage.find({staticPage_id: req.params.id})... });
有没有一个正确的方法来使用更清洁的URL,并快速加载?
您可以通过先定义所有“静态”路由,然后使用dynamic路由器来完善您的第一种方法,如下所示:
app.get('/login', function (req, res) { /* ... */ }); app.get('/logout', function (req, res) { /* ... */ }); app.get('/:dynamicRoute', function (req, res) { res.send(res.params.dynamicRoute); });
首先定义所有的静态路由:
app.get(/forum/:id, function(req, res, next){ ... // forum.find({forum_id: req.params.id})... });
现在,要为CMS创build静态页面,只需在path/
下创build一个自定义中间件,然后在数据库中search请求path,以检查是否存在页面。
// page storage // could be MySQL, MongoDb or anything else you are using var pages = require(......); app.use(function(req, res, next) { // find page in the database using the request path pages.findPage(req.path, funcion(err, page) { // error occured, so we call express error handler if (err) return next(err); // no page exists, so call the next middleware if (!page) return next(); // page found // so render the page and return response // return res.status(200).render(...........); }); });