2013-02-27 12 views
32

मैं वर्तमान में एक्सप्रेस (नोड.जेएस) के साथ बनाए गए एप्लिकेशन पर काम कर रहा हूं और मैं जानना चाहता हूं कि अलग-अलग वातावरण (विकास, उत्पादन) के लिए विभिन्न robots.txt को संभालने का सबसे बढ़िया तरीका क्या है।एक्सप्रेस में 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: /' 

(एनबी: यह CoffeeScript है)

एक बेहतर होना चाहिए मार्ग। आपको इसे कैसे करना होगा?

धन्यवाद।

उत्तर

46

एक मिडलवेयर समारोह का उपयोग करें। इस तरह robots.txt किसी भी सत्र, cookieParser, आदि से पहले नियंत्रित किया जाएगा:

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

निश्चित रूप से यह 'app.use ('/robots.txt ', फ़ंक्शन (req, res, next) {...}) करने के लिए समझ में आता है;' और 'req.url' चेक को खो दें। – c24w

+0

@ c24w एक्सप्रेस 4 हां के साथ यह होगा। 'app.get' भी काम करेगा। मैं अपडेट करूंगा। धन्यवाद – SystemParadox

+0

आह, मैंने सोचा कि यह एक नई एपीआई सुविधा हो सकती है (मुझे जांच करनी चाहिए)। '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')); 
} 

तो आप robots.txt के प्रत्येक संस्करण के साथ 2 निर्देशिका जोड़ें।

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

और आप या तो निर्देशिका में और फ़ाइलें जोड़ना जारी रख सकते हैं और अपना कोड सरल बना सकते हैं।

(जावास्क्रिप्ट क्षमा करें, यह है, 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

:

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 अब आदेश ऐसा लगता है कि आप सिर्फ इतना है कि उपयोग कर सकते हैं में से संभाला जाता है के साथ

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. बनाएं निम्नलिखित सामग्री के साथ:

    User-agent: * 
    Disallow: 
    
  2. public/ निर्देशिका में जोड़ें।

अपने robots.txthttp://yoursite.com/robots.txt

संबंधित मुद्दे

 संबंधित मुद्दे