Каков самый умный способ обработки robots.txt в Express?
В настоящее время я работаю над приложением, созданным с помощью Express (Node.js), и я хочу знать, что является самым умным способом обработки различных файлов 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: /'
(NB: это CoffeeScript)
Должен быть лучший способ. Как вы это сделаете?
Спасибо.
Ответы
Ответ 1
Используйте функцию промежуточного программного обеспечения. Таким образом, robots.txt будет обработан перед любой сессией, cookieParser и т.д.
app.use('/robots.txt', function (req, res, next) {
res.type('text/plain')
res.send("User-agent: *\nDisallow: /");
});
С express 4 app.get
теперь обрабатывается в том порядке, в котором он появляется, поэтому вы можете просто использовать это:
app.get('/robots.txt', function (req, res) {
res.type('text/plain');
res.send("User-agent: *\nDisallow: /");
});
Ответ 2
ваш robots.txt
будет доступен для искателя в http://yoursite.com/robots.txt
Ответ 3
Похоже, хорошо.
Альтернативой, если вы хотите иметь возможность редактировать 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)
Ответ 4
Это то, что я сделал на своих индексных маршрутах. Вы можете просто записать в свои коды то, что я сделал ниже.
router.get('/', (req, res) =>
res.sendFile(__dirname + '/public/sitemap.xml')
)
router.get('/', (req, res) => {
res.sendFile(__dirname + '/public/robots.txt')
})
Ответ 5
Для выбора 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();
}
});
}