我目前正在使用app.get来解析我工作的网站的网址请求。我正在使用app.get来完成以下任务:
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();
这可能吗?
更新
我已经将一个errorHandler与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);
虽然我确实需要更改我的文件名以适合这种路由方法,但到目前为止这种方法效果很好。
答案 0 :(得分:1)
您可以执行以下操作:
var routes = {
'/team': function() {},
'/home', function() {}
};
for (path in routes) {
app.get(path, routes[path]);
}
虽然你应该小心这样的微优化。使用标准语法可以保持代码清晰可读。走出你的方式来制作代码"更小"虽然牺牲易读性并不总是一件好事。
答案 1 :(得分:0)
如果您只需要编写更少的代码来制作"非dot-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
。所以我们的正则表达式运行速度比非正则表达式慢两倍。这就是为什么建议尽可能避免性能敏感应用中的正则表达式。
我希望我回答你的问题,对不起我的英语:)