2013-02-27 27 views
32

Tôi hiện đang làm việc trên một ứng dụng được xây dựng với Express (Node.js) và tôi muốn biết cách thông minh nhất để xử lý robots.txt khác nhau cho các môi trường khác nhau (phát triển, sản xuất) là gì.Cách thông minh nhất để xử lý robots.txt trong Express là gì?

Đây là những gì tôi có ngay bây giờ nhưng tôi không thuyết phục bởi giải pháp, tôi nghĩ rằng đó là dơ bẩn:

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: nó là CoffeeScript)

Nên có một tốt hơn đường. Bạn sẽ làm điều này như thế nào?

Cảm ơn bạn.

Trả lời

46

Sử dụng chức năng trung gian. Bằng cách này, robots.txt sẽ được xử lý trước khi bất kỳ phiên, cookieParser, vv:

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

Với tốc 4 app.get nay được xử lý theo thứ tự nó xuất hiện vì vậy bạn chỉ có thể sử dụng:

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

Chắc chắn nó làm cho tinh thần để làm 'app.use ('/ robots.txt', chức năng (req, res, tiếp theo) {...});' và mất 'req.url' kiểm tra. – c24w

+0

@ c24w với tốc độ 4 có. 'app.get' cũng sẽ hoạt động. Tôi sẽ cập nhật. Cảm ơn – SystemParadox

+0

Ah, tôi nghĩ rằng nó có thể là một tính năng API mới (tôi nên đã kiểm tra). 'app.get' thậm chí còn tốt hơn!:) – c24w

2

Có vẻ như một cách ok.

Cách khác, nếu bạn muốn chỉnh sửa robots.txt làm tệp thông thường và có thể có các tệp khác bạn chỉ muốn ở chế độ sản xuất hoặc phát triển, hãy sử dụng 2 thư mục riêng biệt và kích hoạt một thư mục khác khởi động.

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

sau đó bạn thêm 2 thư mục với mỗi phiên bản của robots.txt.

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

Và bạn có thể tiếp tục thêm các tệp khác trong thư mục và giữ mã của bạn đơn giản hơn.

(xin lỗi, đây là javascript, không coffeescript)

+0

Đó là thú vị, tôi nghĩ rằng tôi sẽ cố gắng một cái gì đó như thế, có vẻ duyên dáng hơn với tôi! Cảm ơn bạn! – Vinch

+0

chỉ muốn đề cập rằng mọi thứ sẽ sớm thay đổi (Express 4.0). Bạn cần "native" .env rồi [process.env.NODE_ENV] :: http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 – sebilasse

0

Đối với việc lựa chọn các robots.txt tùy thuộc môi trường một cách middleware:

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. Tạo 012.với nội dung sau:

    User-agent: * 
    Disallow: 
    
  2. thêm nó vào thư mục public/.

bạn robots.txt sẽ có sẵn cho bánh xích tại http://yoursite.com/robots.txt

Các vấn đề liên quan