2011-04-26 35 views
48

Tôi đang sử dụng để làm việc trên httpd (Apache) cung cấp cách định cấu hình tên miền phụ được ánh xạ tới một thư mục. Tôi có thể làm điều tương tự như thế nào trong Connect.js/Express.js? Tôi thấy rằng điều duy nhất mà tôi có là các tuyến đường mà tôi không chắc chắn làm thế nào tôi có thể sử dụng để cấu hình các tên miền phụ. Tôi có các tên miền phụ như m.mysite.com, sync.mysite.comLàm cách nào tôi có thể định cấu hình nhiều miền phụ trong Express.js hoặc Connect.js

Ai đó có thể trợ giúp?

+0

Câu trả lời được chấp nhận phải được cập nhật vì câu trả lời thay thế là giải pháp tốt hơn cho vấn đề này. –

Trả lời

104

Hoặc cách khác bạn có thể sử dụng vhost.

Sau đó, tạo một số trang web trong thư mục của riêng chúng và xuất ứng dụng tốc hành, ví dụ: /path/to/m/index.js:

var app = express() 
/* whatever configuration code */ 
exports.app = app 
// There is no need for .listen() 

Và sau đó xử lý tất cả các yêu cầu với các ứng dụng sau:

var vhost = require('vhost'); 

express() 
.use(vhost('m.mysite.com', require('/path/to/m').app)) 
.use(vhost('sync.mysite.com', require('/path/to/sync').app)) 
.listen(80) 

Lưu ý rằng /path/to/m/path/to/sync có thể đường dẫn tuyệt đối (như viết ở trên) hoặc đường dẫn tương đối.

+0

Điều này có vẻ giống như một cách sạch hơn và rõ ràng hơn để đạt được các tên miền phụ với express. – btleffler

+0

Và sau đó những gì nên ở trong/path/to/m và/path/to/sync? Một ứng dụng tốc hành khác, như thường lệ? – Costa

+0

Có, @Costa. Mỗi bản đồ vhost nên trỏ đến một ứng dụng nhanh. – ekillaby

17

Bạn có thể thêm tên miền phụ vào yêu cầu và sau đó kiểm tra nó trong các cuộc gọi next() sau đó.

Tôi có đoạn mã sau từ>http://groups.google.com/group/express-js/browse_thread/thread/b04bbaea7f0e8eed (tín dụng đầy cho tác giả ban đầu)

app.get('*', function(req, res, next){ 
    if(req.headers.host == 'some.sub.domain.com') //if it's a sub-domain 
    req.url = '/mysubdomain' + req.url; //append some text yourself 
    next(); 
}); 

// This will mean that all get requests that come from the subdomain will get 
// /subdomain appended to them, so then you can have routes like this 
app.get('/blogposts', function(){ 
    // for non-subdomain 
}); 

app.get('/mysubdomain/blogposts', function(){ 
    // for subdomain 
}); 
6

Tôi tạo ra một mô-đun để giúp đỡ với tên miền phụ trong Express: https://github.com/WilsonPage/express-subdomain-handler

+0

Xin chào, trình xử lý miền phụ của bạn trông thú vị. Làm thế nào tôi sẽ sử dụng điều này với nói "dev.localhost"? Những gì khác tôi sẽ cần phải thay đổi bên cạnh "baseUrl: localhost", nó không phải là rất rõ ràng từ ví dụ bạn đăng. Cảm ơn. – braitsch

+0

Nếu bạn đang sử dụng nó cục bộ, bạn sẽ phải đảm bảo rằng tên miền phụ bạn đang sử dụng được liệt kê bên trong tệp 'hosts' của máy. Khi sản xuất, bạn có thể thiết lập các tên miền phụ ký tự đại diện để bạn không phải liệt kê mọi tên miền phụ bạn cần. Tôi thường sử dụng định dạng: subdomain.mysite.dev (cục bộ) và subdomain.mysite.com (trong sản xuất). – wilsonpage

10

Gần đây tôi đã đi qua vấn đề này, và đã viết một module để giúp nó sử dụng nhanh 4. https://www.npmjs.org/package/express-subdomain.

Ví dụ - tên miền phụ api.

var express = require('express'); 
var app = express(); 

var router = express.Router(); 

//api specific routes 
router.get('/', function(req, res) { 
    res.send('Welcome to our API!'); 
}); 

router.get('/users', function(req, res) { 
    res.json([ 
     { name: "Brian" } 
    ]); 
}); 

app.use(subdomain('api', router)); 
app.listen(3000); 

Kiểm tra mô-đun trên npm để xem các ví dụ khác.

+2

Mô-đun tuyệt vời, hoạt động đẹp mắt. Cảm ơn bạn! – Jon

+2

Điều này dường như chỉ xác định các tuyến cho tên miền phụ - làm thế nào để bạn xác định các tuyến cho tên miền gốc một lần nữa? – fatuhoku

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