Подтвердить что ты не робот

Отправить дополнительные заголовки http с помощью Express.JS

У меня есть несколько статических страниц, обслуживаемых 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 }));
});

Я хочу, чтобы ответ включал дополнительный HTTP-заголовок (Access-Control-Allow-Origin: *). Где он должен быть размещен? Я попробовал приведенный ниже пример, но, конечно, заголовок появляется только на странице по умолчанию:

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

Спасибо.

4b9b3361

Ответ 1

Я попробовал приведенный ниже пример, но, конечно, заголовок появляется только на странице по умолчанию

Да, это потому, что вы определили его только для маршрута GET /, а не для других путей. Вместо этого вы должны использовать промежуточное программное обеспечение.

Если вы хотите установить заголовок для всех запросов:

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 }));
});

Если вы просто хотите сделать это для статических папок, общего метода нет. Вероятно, вы можете изменить express.static(который приходит из connect.static). Другой способ сделать это - сопоставить URL-адреса и задать заголовок, если URL-адрес сопоставлен.

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 }));
});

ПРИМЕЧАНИЕ. что промежуточное ПО должно быть до того, как маршруты будут действовать, другими словами, вы не можете поместить промежуточное программное обеспечение после статического промежуточного программного обеспечения.

Ответ 2

Другой способ:

app.use(express.static(
    path.join(application_root, "StaticPages"),
    {
        setHeaders: (res) => {
            res.setHeader('Access-Control-Allow-Origin', '*')
        }
    }
))