2013-01-05 13 views
33

Tôi có một vài trang tĩnh được phân phát bằng Express.JS. Quá trình cài đặt rất dễ dàng:Gửi các tiêu đề http bổ sung bằng Express.JS

var app = express(); 

app.configure(function(){ 
    app.use(express.static(path.join(application_root, "StaticPages"))); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

Tôi muốn câu trả lời bao gồm một tiêu đề http addittional (Access-Control-Allow-Origin: *). Nó nên được đặt ở đâu? Tôi đã thử mẫu bên dưới, nhưng tất nhiên tiêu đề chỉ xuất hiện trên trang mặc định:

app.get('/', function(req, res){ 
    res.setHeader("Access-Control-Allow-Origin", "*"); 
    res.send('Hello World'); 
}); 

Cảm ơn.

+1

Đối với những người tìm kiếm làm thế nào để thiết lập một tiêu đề tùy chỉnh trên một tuyến đường và 'res.setHeader' không được xác định, sử dụng 'res.set' hoặc' res.header'. http://expressjs.com/en/api.html#res.set – AndyPerlitch

Trả lời

48

Tôi đã thử các mẫu dưới đây, nhưng dĩ nhiên tiêu đề chỉ xuất hiện trên các trang mặc định

Vâng, đó là bởi vì bạn đã định nghĩa nó chỉ cho con đường GET / và không cho các đường dẫn khác. Bạn nên sử dụng phần mềm trung gian thay thế.

Nếu bạn muốn đặt tiêu đề cho tất cả các yêu cầu:

app.configure(function(){ 
    app.use(function(req, res, next) { 
    res.setHeader("Access-Control-Allow-Origin", "*"); 
    return next(); 
    }); 
    app.use(express.static(path.join(application_root, "StaticPages"))); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

Nếu bạn chỉ muốn làm điều đó cho các thư mục tĩnh, không có phương pháp chung. Bạn có thể thay đổi express.static (xuất phát từ connect.static). Một cách khác để làm điều đó là so khớp các url và đặt tiêu đề nếu url được khớp.

app.configure(function(){ 
    app.use(function(req, res, next) { 
    var matchUrl = '/StaticFolder'; 
    if(req.url.substring(0, matchUrl.length) === matchUrl) { 
     res.setHeader("Access-Control-Allow-Origin", "*"); 
    } 
    return next(); 
    }); 
    app.use(express.static(path.join(application_root, "StaticPages"))); 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

LƯU Ý: phần mềm trung gian cần phải trước khi các tuyến đường có hiệu lực, nói cách khác bạn không thể đặt phần mềm trung gian sau phần mềm trung gian tĩnh.

+0

hoạt động, cảm ơn. Tôi cần trường hợp đầu tiên. – csg

+1

Điều gì về 'setHeaders - Chức năng để thiết lập tiêu đề HTTP để phục vụ với tệp. - Chức năng' trong tĩnh http://expressjs.com/en/4x/api.html#express.static – Green

+0

Bạn có thể thêm trình xử lý _after_ phần mềm trung gian tĩnh đặt tiêu đề mà không có kết hợp chuỗi con url, thay vì sử dụng 'ứng dụng. sử dụng' ... ít chi phí –

2

Một cách khác:

app.use(express.static(
    path.join(application_root, "StaticPages"), 
    { 
     setHeaders: (res) => { 
      res.setHeader('Access-Control-Allow-Origin', '*') 
     } 
    } 
)) 
Các vấn đề liên quan