我目前正在使用app.get来解决我工作的网站的URL请求
www.site.com/html/contact.html
而是被翻译成
www.site.com/contact
我使用app.get的方式如下:
app.get('/team',function(req,res){res.sendfile('team.html',{'root':'./html'});});
app.get('/yada',function(req,res){res.sendfile('yada.html',{'root':'./html'});});
app.get('/home',function(req,res){res.redirect('/');});
app.get('*',function(req, res){res.redirect('/');});
这一切都非常有效,我的问题可能是JavaScript特有的。我想要的是这样的东西:
app.get({
'/team',function() ...,
'/home',function() ...,
'/yada',function()...
});
类似于我可以做的:
var express = requires('express'),
app = express();
这可能吗?
更新
我在CuriousGuy的解决方案中加入了一个错误处理程序,效果非常好:
errorHandler = function(err,req,res,next){res.redirect('/');};
app.get('/:page',function(req,res){res.sendFile(req.params.page + '.html',{'root':'./html'});}).use(errorHandler);
尽管我确实不得不更改文件名以适当地适应这种路由方法,但到目前为止,这种方法效果很好。
您可以执行以下操作:
var routes = {
'/team': function() {},
'/home', function() {}
};
for (path in routes) {
app.get(path, routes[path]);
}
尽管你应该小心这样的微观优化。使用标准语法可以保持代码的整洁和可读性。在牺牲易读性的同时,让代码变得"更小"并不总是一件好事。
如果你只需要写更少的代码来制作"非点html"URL,你可以使用正则表达式:
app.get(/^/(team|yada|contact)/?$/, function(req, res) {
res.sendfile('./html/' + req.params[0] + '.html');
});
app.get('*',function(req, res){res.redirect('/');});
在team|yada|contact
部分的上方是由|
分隔的页面列表。此列表中可以有任意多个页面,但请记住,正则表达式可能会影响应用程序的性能。
更新:
经过一段时间的编码,我找到了一个没有正则表达式的解决方案:
app.get('/:page', function(req, res, next) {
if (['team', 'yada', 'contact'].indexOf(req.params.page) === -1) {
return next();
}
res.sendfile('./html/' + req.params.page + '.html');
});
只需将需要的页面添加到['team', 'yada', 'contact']
数组即可。
更新2:
为了演示正则表达式的性能,我编写了一个小脚本,它以两种不同的方式实现相同的功能——在第一种情况下,它用正则表达式替换字符串,在另一种情况下——不使用正则表达式:
var sentence = 'In order to consolidate your success we advise you to continue your work';
for (var i = 0; i < 1000000; i++) {
//case 1: regular expressions replacement
var word = sentence.replace(/success/, 'SUCCESS');
//case 2: simple string replacement
//var word = sentence.replace('success', 'SUCCESS');
}
并使用以下命令运行两次(在Linux机器上):
time node test.js
当案例1被取消注释,案例2被注释时,我得到了关于0m1.106s
的信息,否则——0m0.585s
。因此,regex的运行速度是非regex的两倍。这就是为什么如果可能的话,建议在性能敏感的应用程序中避免使用正则表达式。
我希望我回答了你的问题,很抱歉我的英语:)