2013-02-27 68 views
32

我目前正在使用Express(Node.js)構建一個應用程序,我想知道什麼是處理不同環境(開發,生產)的不同robots.txt最聰明的方法。在Express中處理robots.txt的最聰明的方法是什麼?

這就是我現在所擁有的,但我沒有被說服的解決方案,我認爲這是骯髒的:

app.get '/robots.txt', (req, res) -> 
    res.set 'Content-Type', 'text/plain' 
    if app.settings.env == 'production' 
    res.send 'User-agent: *\nDisallow: /signin\nDisallow: /signup\nDisallow: /signout\nSitemap: /sitemap.xml' 
    else 
    res.send 'User-agent: *\nDisallow: /' 

(注:這是CoffeeScript的)

應該有一個更好的辦法。你會怎麼做?

謝謝。

回答

46

使用中間件的功能。通過這種方式,將robots.txt的任何會議,cookieParser等前處理:

app.use(function (req, res, next) { 
    if ('/robots.txt' == req.url) { 
     res.type('text/plain') 
     res.send("User-agent: *\nDisallow: /"); 
    } else { 
     next(); 
    } 
}); 

隨着快遞4 app.get現在得到它,這樣您就可以只使用該訂單處理:

app.get('/robots.txt', function (req, res) { 
    res.type('text/plain'); 
    res.send("User-agent: *\nDisallow: /"); 
}); 
+1

'app.use('/ robots.txt',函數(req,res,next){...});'並失去'req.url'檢查確實是有意義的。 – c24w 2015-02-02 16:49:28

+0

@ c24w與快遞4是的,它會。 'app.get'也可以。我會更新。謝謝 – SystemParadox 2015-02-03 08:59:37

+0

啊,我認爲這可能是一個新的API功能(我應該檢查)。 'app.get'更好!:) – c24w 2015-02-03 10:16:27

2

看起來像一個好方法。

另一種方法是,如果您希望能夠將robots.txt編輯爲常規文件,並且可能在生產或開發模式下只需要其他文件,則可以使用2個獨立的目錄,然後激活其中一個或另一個目錄啓動。

if (app.settings.env === 'production') { 
    app.use(express['static'](__dirname + '/production')); 
} else { 
    app.use(express['static'](__dirname + '/development')); 
} 

然後在每個版本的robots.txt中添加2個目錄。

PROJECT DIR 
    development 
     robots.txt <-- dev version 
    production 
     robots.txt <-- more permissive prod version 

而且你可以保持在任一目錄下添加多個文件,並保持你的代碼更簡單。

(對不起,這是JavaScript的,而不是CoffeeScript的)

+0

這很有趣,我想我會嘗試類似的東西,它看起來更優美給我!謝謝! – Vinch 2013-02-27 22:49:27

+0

只是想提及事情會很快改變(Express 4.0)。您需要「native」.env然後[process.env.NODE_ENV] :: http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 – sebilasse 2014-03-20 09:18:35

0

對於選擇具有中間件的方式取決於環境的robots.txt:

var env = process.env.NODE_ENV || 'development'; 

if (env === 'development' || env === 'qa') { 
    app.use(function (req, res, next) { 
    if ('/robots.txt' === req.url) { 
     res.type('text/plain'); 
     res.send('User-agent: *\nDisallow: /'); 
    } else { 
     next(); 
    } 
    }); 
} 
-2
  1. 創建robots.txt有以下內容:

    User-agent: * 
    Disallow: 
    
  2. 它添加到public/目錄。

robots.txt將提供給履帶在http://yoursite.com/robots.txt

相關問題