2013-02-27 6 views
32

В настоящее время я работаю над приложением, созданным с помощью Express (Node.js), и я хочу знать, что является самым умным способом обработки различных файлов robots.txt для разных сред (разработка, производство).Каков самый умный способ обработки robots.txt в Express?

Это то, что я прямо сейчас, но я не уверен, решением, я думаю, что это грязно:

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)

Там должно быть лучше путь. Как бы вы это сделали?

спасибо.

ответ

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', function (req, res, next) {...});' и терять проверку 'req.url'. – c24w

+0

@ c24w с экспрессом 4 да было бы. 'app.get' также будет работать. Я обновлю. Спасибо – SystemParadox

+0

Ах, я думал, что это может быть новая функция API (я должен был проверить). 'app.get' еще лучше!:) – c24w

2

Похоже, хорошо.

Альтернатива, если вы хотите, чтобы иметь возможность редактировать robots.txt в качестве обычного файла и, возможно, иметь другие файлы, которые вы хотите только в режиме производства или разработки, - это использовать 2 отдельных каталога и активировать тот или иной запускать.

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

После этого вы добавляете 2 каталога с каждой версией robots.txt.

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

И вы можете продолжать добавлять больше файлов в любой каталог и поддерживать свой код проще.

(извините, это JavaScript, не CoffeeScript)

+0

Это интересно, я думаю, что я буду пытаться что-то подобное, это выглядит более изящным ко мне! Спасибо! – Vinch

+0

просто хотел сказать, что ситуация скоро изменится (экспресс 4.0). Вам нужен «родной» .env, затем [process.env.NODE_ENV] :: http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 – sebilasse

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

Смежные вопросы