我试图使用Node.js和Express.js创建小型CMS,我想知道动态路由模块的最佳方法是什么。我可以理解一些红色文件,有些我无法理解。什么是正确的方法呢?
如果用户(通常是站点管理员)创建静态页面,论坛和一些名称相同的模块:
我认为有两种方法来路由此页面,
首先:我认为这是理智的方式,网址很干净,但可能会降低网页加载速度。
app.get(/:module, function(req, res, next){
...
// if req.params.modules == (login || logout ...)
// handle it
// else if
// module.find()... and render...
});
第二:如果我将模块用户分开,我认为网址更复杂,但网站加载比上面的方式更快。
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,并快速加载两者?
答案 0 :(得分: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 :(得分:0)
您可以通过首先定义所有“静态”路由,然后使用动态路由器来完善您的第一种方法,如下所示:
app.get('/login', function (req, res) { /* ... */ });
app.get('/logout', function (req, res) { /* ... */ });
app.get('/:dynamicRoute', function (req, res) {
res.send(res.params.dynamicRoute);
});