2014-11-01 72 views
1

我目前使用app.get來解析我工作的網站的URL請求。我使用app.get完成以下任務:Node.js Express緊湊腳本

www.site.com/html/contact.html

反而翻譯成

www.site.com /聯繫

我使用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(); 

這可能嗎?

UPDATE

我已經把與CuriousGuy的解決方案設置ErrorHandler它的作品真的很好:

errorHandler = function(err,req,res,next){res.redirect('/');}; 
app.get('/:page',function(req,res){res.sendFile(req.params.page + '.html',{'root':'./html'});}).use(errorHandler); 

雖然我也不得不改變我的文件名來適當地適應路由的這種方法,但這工作到目前爲止很漂亮。

回答

1

你可以這樣做:

var routes = { 
    '/team': function() {}, 
    '/home', function() {} 
}; 
for (path in routes) { 
    app.get(path, routes[path]); 
} 

雖然你應該小心與微優化是這樣的。使用標準語法可以保持您的代碼清晰可讀。在犧牲易讀性的同時,儘量讓代碼變得更小,並不總是一件好事。

+0

感謝您的投入,我並不認爲微優化(正是我要去的)會妨礙可讀性。 – SalTor 2014-11-01 14:50:57

0

如果你需要的是少寫代碼,使「非點HTML」的網址,你可以使用正則表達式:

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。所以我們的正則表達式運行速度比非正則表達式的速度慢兩倍。這就是爲什麼如果可能的話,建議在性能敏感的應用程序中避免使用正則表達式。

我希望我回答你的問題,和對不起我的英文:)

+0

CuriousGuy,我已經能夠成功實現你提到的兩種方式,但我很好奇,爲什麼使用正則表達式會妨礙性能。 – SalTor 2014-11-01 18:39:33

+0

@SalTor看看我更新的答案。 – Curious 2014-11-01 19:42:16

+0

我真的很感謝使用RegEx的時間效率的最後一個例子,我從來沒有想過要以這種方式來測試事情,現在我知道了兩件新事物。你確實回答了我的問題,謝謝! :) – SalTor 2014-11-01 20:54:27