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(...........); }); });