2013-02-27 4 views
32

Ich arbeite gerade an einer Anwendung, die mit Express (Node.js) erstellt wurde, und ich möchte wissen, was die intelligenteste Art ist, verschiedene robots.txt für verschiedene Umgebungen (Entwicklung, Produktion) zu behandeln.Was ist der beste Weg, um mit robots.txt in Express umzugehen?

Das ist, was ich jetzt habe, aber ich bin nicht von der Lösung überzeugt, ich denke, es ist schmutzig:

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: Es ist Coffeescript)

sollte es eine bessere sein Weg. Wie würdest du es machen?

Vielen Dank.

Antwort

46

eine Middleware-Funktion verwenden. Auf diese Weise die robots.txt wird vor jeder Sitzung behandelt werden, cookieParser, etc:

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

Mit express 4 app.get nun in der Reihenfolge behandelt wird es erscheint, so können Sie nur, dass verwenden:

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

Sicher macht es Sinn, 'app.use ('/ robots.txt', function (req, res, next) {...});' zu benutzen und '' req.url' 'zu verlieren. – c24w

+0

@ c24w mit Express 4 ja, es wäre. 'app.get' würde auch funktionieren. Ich werde aktualisieren. Danke – SystemParadox

+0

Ah, ich dachte, es könnte eine neue API-Funktion sein (hätte ich nachsehen sollen). 'app.get' ist noch besser!:) – c24w

2

Sieht aus wie ein ok Weg.

Eine Alternative, wenn Sie in der Lage sein möchten, robots.txt als reguläre Datei zu bearbeiten, und möglicherweise andere Dateien, die Sie nur im Produktions- oder Entwicklungsmodus wollen, wäre zwei separate Verzeichnisse zu verwenden, und aktivieren Sie das eine oder das andere um Anfang.

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

dann fügen Sie 2 Verzeichnisse mit jeder Version von robots.txt hinzu.

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

Und Sie können weitere Dateien in beiden Verzeichnis hinzufügen und halten Sie Ihren Code einfacher.

(sorry, das Javascript ist, Coffeescript nicht)

+0

zu Crawler verfügbar sein Das ist interessant, ich glaube ich so etwas würde versuchen, es sieht aus anmutiger zu mir! Vielen Dank! – Vinch

+0

wollte nur erwähnen, dass sich die Dinge bald ändern werden (Express 4.0). Sie benötigen die "native" .env dann [process.env.NODE_ENV] :: http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 – sebilasse

0

für die robots.txt Wahl der Umgebung mit einer Middleware Art und Weise abhängig:

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. erstellen robots.txt mit folgendem Inhalt:

    User-agent: * 
    Disallow: 
    
  2. fügen Sie public/ Verzeichnis.

Ihr robots.txt wird bei http://yoursite.com/robots.txt