web-dev-qa-db-fra.com

Quelle est la façon la plus intelligente de gérer le fichier robots.txt dans Express?

Je travaille actuellement sur une application construite avec Express (Node.js) et je veux savoir quelle est la façon la plus intelligente de gérer différents robots.txt pour différents environnements (développement, production).

C'est ce que j'ai en ce moment mais je ne suis pas convaincu par la solution, je pense qu'elle est sale:

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: c'est CoffeeScript)

Il devrait y avoir une meilleure façon. Comment feriez-vous?

Je vous remercie.

58
Vinch

Utilisez une fonction middleware. De cette façon, le fichier robots.txt sera traité avant toute session, cookieParser, etc.:

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

Avec express 4 app.get est maintenant traité dans l'ordre dans lequel il apparaît, vous pouvez donc simplement l'utiliser:

app.get('/robots.txt', function (req, res) {
    res.type('text/plain');
    res.send("User-agent: *\nDisallow: /");
});
91
SystemParadox
  1. Créer robots.txt avec le contenu suivant:

    User-agent: *
    Disallow:
    
  2. ajoutez-le à public/ répertoire.

votre robots.txt sera disponible pour les robots d'exploration à http://yoursite.com/robots.txt

8
atul

Ressemble à une manière correcte.

Une alternative, si vous souhaitez pouvoir modifier robots.txt en tant que fichier normal, et éventuellement avoir d'autres fichiers que vous souhaitez uniquement en mode production ou développement serait d'utiliser 2 répertoires distincts et d'activer l'un ou l'autre au démarrage.

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

puis vous ajoutez 2 répertoires avec chaque version de robots.txt.

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

Et vous pouvez continuer à ajouter plus de fichiers dans l'un ou l'autre répertoire et garder votre code plus simple.

(désolé, c'est du javascript, pas du coffeescript)

2
Pascal Belloncle

C'est ce que j'ai fait sur mes routes d'index. Vous pouvez simplement écrire dans vos codes ce que je donne ci-dessous.

router.get('/', (req, res) =>
    res.sendFile(__dirname + '/public/sitemap.xml')
)

router.get('/', (req, res) => {
    res.sendFile(__dirname + '/public/robots.txt')
})
0
Chan Myae Maung