2013-02-27 15 views
32

Obecnie pracuję nad aplikacją zbudowaną za pomocą Express (Node.js) i chcę wiedzieć, jaki jest najmądrzejszy sposób obsługi różnych plików robots.txt w różnych środowiskach (programowanie, produkcja).Jaki jest najmądrzejszy sposób obsługi pliku robots.txt w Expressie?

To co mam teraz, ale nie jestem przekonany przez rozwiązanie, myślę, że jest brudna:

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: /' 

(Uwaga: to coffeescript)

Nie powinno być lepiej droga. Jak byś to zrobił?

Dziękuję.

Odpowiedz

46

Użyj funkcji middleware. W ten sposób będą obsługiwane robots.txt przed każdą sesją, cookieParser, etc:

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

Z express 4 app.get dostaje teraz obsługiwane w kolejności okazuje się, dzięki czemu można używać tylko, że:

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

Z pewnością ma sens wykonanie 'app.use ('/ robots.txt', function (req, res, next) {...});' i utratę sprawdzenia 'req.url'. – c24w

+0

@ c24w with express 4 yes it would would. 'app.get' też by działało. Zaktualizuję. Dzięki – SystemParadox

+0

Ah, myślałem, że to może być nowa funkcja API (powinienem to sprawdzić). 'app.get' jest jeszcze lepszy!:) – c24w

2

Wygląda jak w porządku.

Alternatywą, jeśli chcesz móc edytować robots.txt jako zwykły plik, i ewentualnie mieć inne pliki, których potrzebujesz tylko w trybie produkcyjnym lub programistycznym, byłoby użycie 2 oddzielnych katalogów i aktywacja jednego lub drugiego uruchomienie.

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

Następnie dodajesz 2 katalogi z każdą wersją pliku robots.txt.

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

Możesz dodawać kolejne pliki do dowolnego katalogu i zachować prostszy kod.

(przepraszam, to jest javascript, nie coffeescript)

+0

To ciekawe, myślę, że spróbuję coś takiego, to wygląda bardziej wdzięczne do mnie! Dziękuję Ci! – Vinch

+0

chciałem tylko wspomnieć, że wkrótce wszystko się zmieni (Express 4.0). Potrzebujesz "natywnego" .env, a następnie [process.env.NODE_ENV] :: http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading- od3-0 – sebilasse

0

za wybranie pliku robots.txt w zależności od środowiska w sposób middleware:

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. Tworzenie robots.txt o następującej treści:

    User-agent: * 
    Disallow: 
    
  2. dodać go do public/ katalogu.

swój robots.txt będą dostępne dla robota na http://yoursite.com/robots.txt

Powiązane problemy