Node.js Express紧凑脚本

时间:2014-11-01 05:10:40

标签: javascript node.js express

我目前正在使用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);

虽然我确实需要更改我的文件名以适合这种路由方法,但到目前为止这种方法效果很好。

2 个答案:

答案 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。所以我们的正则表达式运行速度比非正则表达式慢两倍。这就是为什么建议尽可能避免性能敏感应用中的正则表达式。

我希望我回答你的问题,对不起我的英语:)