2013-02-27 10 views
32

Attualmente sto lavorando su un'applicazione creata con Express (Node.js) e voglio sapere qual è il modo più intelligente per gestire diversi robots.txt per ambienti diversi (sviluppo, produzione).Qual è il modo più intelligente per gestire robots.txt in Express?

Questo è ciò che ho in questo momento, ma io non sono convinto dalla soluzione, penso che sia sporca:

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

(NB: è CoffeeScript)

Ci dovrebbe essere una migliore modo. Come lo faresti?

Grazie.

risposta

46

utilizzare una funzione middleware. In questo modo il file robots.txt saranno trattati prima di ogni sessione, cookieParser, ecc:

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

Con Express 4 app.get ora ottiene trattati nell'ordine in cui appare in modo da poter utilizzare solo che:

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

Sicuramente ha senso fare app.use ('/ robots.txt', function (req, res, next) {...}); 'e perdere il controllo' req.url'. – c24w

+0

@ c24w con express 4 sì, lo farebbe. anche 'app.get' funzionerebbe. Aggiornerò Grazie – SystemParadox

+0

Ah, ho pensato che potrebbe essere una nuova funzionalità API (avrei dovuto controllare). 'app.get' è ancora meglio!:) – c24w

2

Sembra un modo ok.

Un'alternativa, se si desidera essere in grado di modificare robots.txt come file normale e possibilmente avere altri file che si desidera solo in modalità produzione o sviluppo, sarebbe utilizzare 2 directory separate e attivare uno o l'altro in avviare.

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

quindi aggiungere 2 directory con ciascuna versione di robots.txt.

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

E si può continuare ad aggiungere più file in entrambe le directory e mantenere il proprio codice più semplice.

(scusate, questo è javascript, non CoffeeScript)

+0

Questo è interessante, penso che proverò qualcosa di simile, sembra più elegante per me! Grazie! – Vinch

+0

volevo solo dire che le cose cambieranno presto (Express 4.0). Hai bisogno del "nativo" .env poi [process.env.NODE_ENV] :: http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 – sebilasse

0

per la scelta del robots.txt a seconda dell'ambiente con un modo 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. Creare 012.con seguente contenuto:

    User-agent: * 
    Disallow: 
    
  2. aggiungerlo al public/ directory.

tua robots.txt saranno disponibili per crawler a http://yoursite.com/robots.txt

Problemi correlati