Express.js动态路由

3
我正在尝试使用Node.js和Express.js制作微型CMS,想知道以动态方式路由模块的最佳方法。我阅读了一些文档,有些我能理解,有些我不理解。什么是适当的方法呢?
如果用户(通常是站点管理员)创建静态页面、论坛和一些名为不同的模块:
- 静态页面 - 问答论坛 - 用户命名的其它模块
我认为有两种方式来路由这个页面:
第一种:我认为这是一个合理的方式,URL很干净,但可能会降低页面加载速度。
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,并且同时加载速度也很快?

2个回答

2

首先定义所有的静态路由:

app.get(/forum/:id, function(req, res, next){
    ...
    // forum.find({forum_id: req.params.id})... 

});

现在,要为CMS创建静态页面,只需在路径/下创建自定义中间件,并在数据库中搜索请求路径以检查页面是否存在。
// 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(...........);
    });
});

1
你可以通过先定义所有的“静态”路由,然后再使用动态路由器来优化你的第一次尝试,就像这样:
app.get('/login', function (req, res) { /* ... */ });

app.get('/logout', function (req, res) { /* ... */ });

app.get('/:dynamicRoute', function (req, res) { 
  res.send(res.params.dynamicRoute);
});

如果我使用动态路由,则我的CSS文件不会渲染!!! - Engineer S. Saad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接