Rya*_*ell 2 routing node.js express
我想在Node Express中设置路由可扩展.
我理解如何设置工作路线...这是我正在努力的失败/不匹配.更具体地说,我正在努力解决如何处理404错误.
这是我的......
app.get('/:folder',function(req,res) {
var path = 'site/' + req.params.folder + '/index.jade';
res.render(path);
});
app.get('/:folder/:topic',function(req,res) {
var path = 'site/' + req.params.folder + '/' + req.params.topic;
res.render(path);
});
app.use(function(req, res, next){
res.status(404).render('site/404.jade');
});
Run Code Online (Sandbox Code Playgroud)
挑战是,:folder和:topic将匹配任何内容,因此404永远不会触发.我不想硬编码我们所有的文件夹和主题名称.那么,如何设置我的路由,以便在文件夹/主题不存在时请求将落到404?
谢谢.
UPDATE
最终的工作解决方案如下.感谢大家.
var fs = require('fs');
app.get('/:folder',function(req,res,next) {
var path = __dirname + '/views/site/' + req.params.folder + '/index.jade';
if(fs.existsSync(path))
{
res.render(path);
}
else
{
next();
}
});
app.get('/:folder/:topic',function(req,res,next) {
var path = __dirname + '/views/site/' + req.params.folder + '/' + req.params.topic + '.jade';
if(fs.existsSync(path))
{
res.render(path);
}
else
{
next();
}
});
app.use(function(req, res){
res.status(404).render('site/404.jade');
});
Run Code Online (Sandbox Code Playgroud)
有第三个(可选)参数传递给app.get:next.next实际上是一个回调,你可以调用它来使你的路线下降到下一个.
所以,你可以这样做:
app.get('/:folder',function(req, res, next) {
var path = 'site/' + req.params.folder + '/index.jade';
var pathIsValid = ... // use something like fs.exists to check if the path is valid
if (pathIsValid) {
res.render(path);
} else {
next()
}
});
Run Code Online (Sandbox Code Playgroud)
如果调用next,它将尝试下一个路径.如果那个(和任何其他人)接下来调用,那么你将进入你的404处理程序.
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |