Node.js Express压缩脚本



我目前正在使用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的两倍。这就是为什么如果可能的话,建议在性能敏感的应用程序中避免使用正则表达式。

我希望我回答了你的问题,很抱歉我的英语:)

最新更新